//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

import Foundation
import SotoCore

extension Neptune {
    // MARK: Enums

    public enum ApplyMethod: String, CustomStringConvertible, Codable {
        case immediate
        case pendingReboot = "pending-reboot"
        public var description: String { return self.rawValue }
    }

    public enum SourceType: String, CustomStringConvertible, Codable {
        case dbCluster = "db-cluster"
        case dbClusterSnapshot = "db-cluster-snapshot"
        case dbInstance = "db-instance"
        case dbParameterGroup = "db-parameter-group"
        case dbSecurityGroup = "db-security-group"
        case dbSnapshot = "db-snapshot"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct AddRoleToDBClusterMessage: AWSEncodableShape {
        /// The name of the DB cluster to associate the IAM role with.
        public let dBClusterIdentifier: String
        /// The name of the feature for the Neptune DB cluster that the IAM role is to be associated with. For the list of supported feature names, see DBEngineVersion.
        public let featureName: String?
        /// The Amazon Resource Name (ARN) of the IAM role to associate with the Neptune DB cluster, for example arn:aws:iam::123456789012:role/NeptuneAccessRole.
        public let roleArn: String

        public init(dBClusterIdentifier: String, featureName: String? = nil, roleArn: String) {
            self.dBClusterIdentifier = dBClusterIdentifier
            self.featureName = featureName
            self.roleArn = roleArn
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
            case featureName = "FeatureName"
            case roleArn = "RoleArn"
        }
    }

    public struct AddSourceIdentifierToSubscriptionMessage: AWSEncodableShape {
        /// The identifier of the event source to be added. Constraints:   If the source type is a DB instance, then a DBInstanceIdentifier must be supplied.   If the source type is a DB security group, a DBSecurityGroupName must be supplied.   If the source type is a DB parameter group, a DBParameterGroupName must be supplied.   If the source type is a DB snapshot, a DBSnapshotIdentifier must be supplied.
        public let sourceIdentifier: String
        /// The name of the event notification subscription you want to add a source identifier to.
        public let subscriptionName: String

        public init(sourceIdentifier: String, subscriptionName: String) {
            self.sourceIdentifier = sourceIdentifier
            self.subscriptionName = subscriptionName
        }

        private enum CodingKeys: String, CodingKey {
            case sourceIdentifier = "SourceIdentifier"
            case subscriptionName = "SubscriptionName"
        }
    }

    public struct AddSourceIdentifierToSubscriptionResult: AWSDecodableShape {
        public let eventSubscription: EventSubscription?

        public init(eventSubscription: EventSubscription? = nil) {
            self.eventSubscription = eventSubscription
        }

        private enum CodingKeys: String, CodingKey {
            case eventSubscription = "EventSubscription"
        }
    }

    public struct AddTagsToResourceMessage: AWSEncodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// The Amazon Neptune resource that the tags are added to. This value is an Amazon Resource Name (ARN). For information about creating an ARN, see  Constructing an Amazon Resource Name (ARN).
        public let resourceName: String
        /// The tags to be assigned to the Amazon Neptune resource.
        @CustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]

        public init(resourceName: String, tags: [Tag]) {
            self.resourceName = resourceName
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case resourceName = "ResourceName"
            case tags = "Tags"
        }
    }

    public struct ApplyPendingMaintenanceActionMessage: AWSEncodableShape {
        /// The pending maintenance action to apply to this resource. Valid values: system-update, db-upgrade
        public let applyAction: String
        /// A value that specifies the type of opt-in request, or undoes an opt-in request. An opt-in request of type immediate can't be undone. Valid values:    immediate - Apply the maintenance action immediately.    next-maintenance - Apply the maintenance action during the next maintenance window for the resource.    undo-opt-in - Cancel any existing next-maintenance opt-in requests.
        public let optInType: String
        /// The Amazon Resource Name (ARN) of the resource that the pending maintenance action applies to. For information about creating an ARN, see  Constructing an Amazon Resource Name (ARN).
        public let resourceIdentifier: String

        public init(applyAction: String, optInType: String, resourceIdentifier: String) {
            self.applyAction = applyAction
            self.optInType = optInType
            self.resourceIdentifier = resourceIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case applyAction = "ApplyAction"
            case optInType = "OptInType"
            case resourceIdentifier = "ResourceIdentifier"
        }
    }

    public struct ApplyPendingMaintenanceActionResult: AWSDecodableShape {
        public let resourcePendingMaintenanceActions: ResourcePendingMaintenanceActions?

        public init(resourcePendingMaintenanceActions: ResourcePendingMaintenanceActions? = nil) {
            self.resourcePendingMaintenanceActions = resourcePendingMaintenanceActions
        }

        private enum CodingKeys: String, CodingKey {
            case resourcePendingMaintenanceActions = "ResourcePendingMaintenanceActions"
        }
    }

    public struct AvailabilityZone: AWSDecodableShape {
        /// The name of the availability zone.
        public let name: String?

        public init(name: String? = nil) {
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
        }
    }

    public struct CharacterSet: AWSDecodableShape {
        /// The description of the character set.
        public let characterSetDescription: String?
        /// The name of the character set.
        public let characterSetName: String?

        public init(characterSetDescription: String? = nil, characterSetName: String? = nil) {
            self.characterSetDescription = characterSetDescription
            self.characterSetName = characterSetName
        }

        private enum CodingKeys: String, CodingKey {
            case characterSetDescription = "CharacterSetDescription"
            case characterSetName = "CharacterSetName"
        }
    }

    public struct CloudwatchLogsExportConfiguration: AWSEncodableShape {
        /// The list of log types to disable.
        @OptionalCustomCoding<StandardArrayCoder>
        public var disableLogTypes: [String]?
        /// The list of log types to enable.
        @OptionalCustomCoding<StandardArrayCoder>
        public var enableLogTypes: [String]?

        public init(disableLogTypes: [String]? = nil, enableLogTypes: [String]? = nil) {
            self.disableLogTypes = disableLogTypes
            self.enableLogTypes = enableLogTypes
        }

        private enum CodingKeys: String, CodingKey {
            case disableLogTypes = "DisableLogTypes"
            case enableLogTypes = "EnableLogTypes"
        }
    }

    public struct CopyDBClusterParameterGroupMessage: AWSEncodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// The identifier or Amazon Resource Name (ARN) for the source DB cluster parameter group. For information about creating an ARN, see  Constructing an Amazon Resource Name (ARN). Constraints:   Must specify a valid DB cluster parameter group.   If the source DB cluster parameter group is in the same AWS Region as the copy, specify a valid DB parameter group identifier, for example my-db-cluster-param-group, or a valid ARN.   If the source DB parameter group is in a different AWS Region than the copy, specify a valid DB cluster parameter group ARN, for example arn:aws:rds:us-east-1:123456789012:cluster-pg:custom-cluster-group1.
        public let sourceDBClusterParameterGroupIdentifier: String
        /// The tags to be assigned to the copied DB cluster parameter group.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?
        /// A description for the copied DB cluster parameter group.
        public let targetDBClusterParameterGroupDescription: String
        /// The identifier for the copied DB cluster parameter group. Constraints:   Cannot be null, empty, or blank   Must contain from 1 to 255 letters, numbers, or hyphens   First character must be a letter   Cannot end with a hyphen or contain two consecutive hyphens   Example: my-cluster-param-group1
        public let targetDBClusterParameterGroupIdentifier: String

        public init(sourceDBClusterParameterGroupIdentifier: String, tags: [Tag]? = nil, targetDBClusterParameterGroupDescription: String, targetDBClusterParameterGroupIdentifier: String) {
            self.sourceDBClusterParameterGroupIdentifier = sourceDBClusterParameterGroupIdentifier
            self.tags = tags
            self.targetDBClusterParameterGroupDescription = targetDBClusterParameterGroupDescription
            self.targetDBClusterParameterGroupIdentifier = targetDBClusterParameterGroupIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case sourceDBClusterParameterGroupIdentifier = "SourceDBClusterParameterGroupIdentifier"
            case tags = "Tags"
            case targetDBClusterParameterGroupDescription = "TargetDBClusterParameterGroupDescription"
            case targetDBClusterParameterGroupIdentifier = "TargetDBClusterParameterGroupIdentifier"
        }
    }

    public struct CopyDBClusterParameterGroupResult: AWSDecodableShape {
        public let dBClusterParameterGroup: DBClusterParameterGroup?

        public init(dBClusterParameterGroup: DBClusterParameterGroup? = nil) {
            self.dBClusterParameterGroup = dBClusterParameterGroup
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroup = "DBClusterParameterGroup"
        }
    }

    public struct CopyDBClusterSnapshotMessage: AWSEncodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// True to copy all tags from the source DB cluster snapshot to the target DB cluster snapshot, and otherwise false. The default is false.
        public let copyTags: Bool?
        /// The AWS AWS KMS key ID for an encrypted DB cluster snapshot. The KMS key ID is the Amazon Resource Name (ARN), KMS key identifier, or the KMS key alias for the KMS encryption key. If you copy an encrypted DB cluster snapshot from your AWS account, you can specify a value for KmsKeyId to encrypt the copy with a new KMS encryption key. If you don't specify a value for KmsKeyId, then the copy of the DB cluster snapshot is encrypted with the same KMS key as the source DB cluster snapshot. If you copy an encrypted DB cluster snapshot that is shared from another AWS account, then you must specify a value for KmsKeyId.  KMS encryption keys are specific to the AWS Region that they are created in, and you can't use encryption keys from one AWS Region in another AWS Region. You cannot encrypt an unencrypted DB cluster snapshot when you copy it. If you try to copy an unencrypted DB cluster snapshot and specify a value for the KmsKeyId parameter, an error is returned.
        public let kmsKeyId: String?
        /// Not currently supported.
        public let preSignedUrl: String?
        /// The identifier of the DB cluster snapshot to copy. This parameter is not case-sensitive. You can't copy from one AWS Region to another. Constraints:   Must specify a valid system snapshot in the "available" state.   Specify a valid DB snapshot identifier.   Example: my-cluster-snapshot1
        public let sourceDBClusterSnapshotIdentifier: String
        /// The tags to assign to the new DB cluster snapshot copy.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?
        /// The identifier of the new DB cluster snapshot to create from the source DB cluster snapshot. This parameter is not case-sensitive. Constraints:   Must contain from 1 to 63 letters, numbers, or hyphens.   First character must be a letter.   Cannot end with a hyphen or contain two consecutive hyphens.   Example: my-cluster-snapshot2
        public let targetDBClusterSnapshotIdentifier: String

        public init(copyTags: Bool? = nil, kmsKeyId: String? = nil, preSignedUrl: String? = nil, sourceDBClusterSnapshotIdentifier: String, tags: [Tag]? = nil, targetDBClusterSnapshotIdentifier: String) {
            self.copyTags = copyTags
            self.kmsKeyId = kmsKeyId
            self.preSignedUrl = preSignedUrl
            self.sourceDBClusterSnapshotIdentifier = sourceDBClusterSnapshotIdentifier
            self.tags = tags
            self.targetDBClusterSnapshotIdentifier = targetDBClusterSnapshotIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case copyTags = "CopyTags"
            case kmsKeyId = "KmsKeyId"
            case preSignedUrl = "PreSignedUrl"
            case sourceDBClusterSnapshotIdentifier = "SourceDBClusterSnapshotIdentifier"
            case tags = "Tags"
            case targetDBClusterSnapshotIdentifier = "TargetDBClusterSnapshotIdentifier"
        }
    }

    public struct CopyDBClusterSnapshotResult: AWSDecodableShape {
        public let dBClusterSnapshot: DBClusterSnapshot?

        public init(dBClusterSnapshot: DBClusterSnapshot? = nil) {
            self.dBClusterSnapshot = dBClusterSnapshot
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterSnapshot = "DBClusterSnapshot"
        }
    }

    public struct CopyDBParameterGroupMessage: AWSEncodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// The identifier or ARN for the source DB parameter group. For information about creating an ARN, see  Constructing an Amazon Resource Name (ARN). Constraints:   Must specify a valid DB parameter group.   Must specify a valid DB parameter group identifier, for example my-db-param-group, or a valid ARN.
        public let sourceDBParameterGroupIdentifier: String
        /// The tags to be assigned to the copied DB parameter group.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?
        /// A description for the copied DB parameter group.
        public let targetDBParameterGroupDescription: String
        /// The identifier for the copied DB parameter group. Constraints:   Cannot be null, empty, or blank.   Must contain from 1 to 255 letters, numbers, or hyphens.   First character must be a letter.   Cannot end with a hyphen or contain two consecutive hyphens.   Example: my-db-parameter-group
        public let targetDBParameterGroupIdentifier: String

        public init(sourceDBParameterGroupIdentifier: String, tags: [Tag]? = nil, targetDBParameterGroupDescription: String, targetDBParameterGroupIdentifier: String) {
            self.sourceDBParameterGroupIdentifier = sourceDBParameterGroupIdentifier
            self.tags = tags
            self.targetDBParameterGroupDescription = targetDBParameterGroupDescription
            self.targetDBParameterGroupIdentifier = targetDBParameterGroupIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case sourceDBParameterGroupIdentifier = "SourceDBParameterGroupIdentifier"
            case tags = "Tags"
            case targetDBParameterGroupDescription = "TargetDBParameterGroupDescription"
            case targetDBParameterGroupIdentifier = "TargetDBParameterGroupIdentifier"
        }
    }

    public struct CopyDBParameterGroupResult: AWSDecodableShape {
        public let dBParameterGroup: DBParameterGroup?

        public init(dBParameterGroup: DBParameterGroup? = nil) {
            self.dBParameterGroup = dBParameterGroup
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroup = "DBParameterGroup"
        }
    }

    public struct CreateDBClusterEndpointMessage: AWSEncodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// The identifier to use for the new endpoint. This parameter is stored as a lowercase string.
        public let dBClusterEndpointIdentifier: String
        /// The DB cluster identifier of the DB cluster associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterIdentifier: String
        /// The type of the endpoint. One of: READER, WRITER, ANY.
        public let endpointType: String
        /// List of DB instance identifiers that aren't part of the custom endpoint group. All other eligible instances are reachable through the custom endpoint. Only relevant if the list of static members is empty.
        @OptionalCustomCoding<StandardArrayCoder>
        public var excludedMembers: [String]?
        /// List of DB instance identifiers that are part of the custom endpoint group.
        @OptionalCustomCoding<StandardArrayCoder>
        public var staticMembers: [String]?
        /// The tags to be assigned to the Amazon Neptune resource.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?

        public init(dBClusterEndpointIdentifier: String, dBClusterIdentifier: String, endpointType: String, excludedMembers: [String]? = nil, staticMembers: [String]? = nil, tags: [Tag]? = nil) {
            self.dBClusterEndpointIdentifier = dBClusterEndpointIdentifier
            self.dBClusterIdentifier = dBClusterIdentifier
            self.endpointType = endpointType
            self.excludedMembers = excludedMembers
            self.staticMembers = staticMembers
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterEndpointIdentifier = "DBClusterEndpointIdentifier"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case endpointType = "EndpointType"
            case excludedMembers = "ExcludedMembers"
            case staticMembers = "StaticMembers"
            case tags = "Tags"
        }
    }

    public struct CreateDBClusterEndpointOutput: AWSDecodableShape {
        /// The type associated with a custom endpoint. One of: READER, WRITER, ANY.
        public let customEndpointType: String?
        /// The Amazon Resource Name (ARN) for the endpoint.
        public let dBClusterEndpointArn: String?
        /// The identifier associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterEndpointIdentifier: String?
        /// A unique system-generated identifier for an endpoint. It remains the same for the whole life of the endpoint.
        public let dBClusterEndpointResourceIdentifier: String?
        /// The DB cluster identifier of the DB cluster associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterIdentifier: String?
        /// The DNS address of the endpoint.
        public let endpoint: String?
        /// The type of the endpoint. One of: READER, WRITER, CUSTOM.
        public let endpointType: String?
        /// List of DB instance identifiers that aren't part of the custom endpoint group. All other eligible instances are reachable through the custom endpoint. Only relevant if the list of static members is empty.
        @OptionalCustomCoding<StandardArrayCoder>
        public var excludedMembers: [String]?
        /// List of DB instance identifiers that are part of the custom endpoint group.
        @OptionalCustomCoding<StandardArrayCoder>
        public var staticMembers: [String]?
        /// The current status of the endpoint. One of: creating, available, deleting, inactive, modifying. The inactive state applies to an endpoint that cannot be used for a certain kind of cluster, such as a writer endpoint for a read-only secondary cluster in a global database.
        public let status: String?

        public init(customEndpointType: String? = nil, dBClusterEndpointArn: String? = nil, dBClusterEndpointIdentifier: String? = nil, dBClusterEndpointResourceIdentifier: String? = nil, dBClusterIdentifier: String? = nil, endpoint: String? = nil, endpointType: String? = nil, excludedMembers: [String]? = nil, staticMembers: [String]? = nil, status: String? = nil) {
            self.customEndpointType = customEndpointType
            self.dBClusterEndpointArn = dBClusterEndpointArn
            self.dBClusterEndpointIdentifier = dBClusterEndpointIdentifier
            self.dBClusterEndpointResourceIdentifier = dBClusterEndpointResourceIdentifier
            self.dBClusterIdentifier = dBClusterIdentifier
            self.endpoint = endpoint
            self.endpointType = endpointType
            self.excludedMembers = excludedMembers
            self.staticMembers = staticMembers
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case customEndpointType = "CustomEndpointType"
            case dBClusterEndpointArn = "DBClusterEndpointArn"
            case dBClusterEndpointIdentifier = "DBClusterEndpointIdentifier"
            case dBClusterEndpointResourceIdentifier = "DBClusterEndpointResourceIdentifier"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case endpoint = "Endpoint"
            case endpointType = "EndpointType"
            case excludedMembers = "ExcludedMembers"
            case staticMembers = "StaticMembers"
            case status = "Status"
        }
    }

    public struct CreateDBClusterMessage: AWSEncodableShape {
        public struct _AvailabilityZonesEncoding: ArrayCoderProperties { public static let member = "AvailabilityZone" }
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }
        public struct _VpcSecurityGroupIdsEncoding: ArrayCoderProperties { public static let member = "VpcSecurityGroupId" }

        /// A list of EC2 Availability Zones that instances in the DB cluster can be created in.
        @OptionalCustomCoding<ArrayCoder<_AvailabilityZonesEncoding, String>>
        public var availabilityZones: [String]?
        /// The number of days for which automated backups are retained. You must specify a minimum value of 1. Default: 1 Constraints:   Must be a value from 1 to 35
        public let backupRetentionPeriod: Int?
        ///  (Not supported by Neptune)
        public let characterSetName: String?
        /// The name for your database of up to 64 alpha-numeric characters. If you do not provide a name, Amazon Neptune will not create a database in the DB cluster you are creating.
        public let databaseName: String?
        /// The DB cluster identifier. This parameter is stored as a lowercase string. Constraints:   Must contain from 1 to 63 letters, numbers, or hyphens.   First character must be a letter.   Cannot end with a hyphen or contain two consecutive hyphens.   Example: my-cluster1
        public let dBClusterIdentifier: String
        ///  The name of the DB cluster parameter group to associate with this DB cluster. If this argument is omitted, the default is used. Constraints:   If supplied, must match the name of an existing DBClusterParameterGroup.
        public let dBClusterParameterGroupName: String?
        /// A DB subnet group to associate with this DB cluster. Constraints: Must match the name of an existing DBSubnetGroup. Must not be default. Example: mySubnetgroup
        public let dBSubnetGroupName: String?
        /// A value that indicates whether the DB cluster has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection is enabled.
        public let deletionProtection: Bool?
        /// The list of log types that need to be enabled for exporting to CloudWatch Logs.
        @OptionalCustomCoding<StandardArrayCoder>
        public var enableCloudwatchLogsExports: [String]?
        /// Not supported by Neptune.
        public let enableIAMDatabaseAuthentication: Bool?
        /// The name of the database engine to be used for this DB cluster. Valid Values: neptune
        public let engine: String
        /// The version number of the database engine to use for the new DB cluster. Example: 1.0.2.1
        public let engineVersion: String?
        /// The AWS KMS key identifier for an encrypted DB cluster. The KMS key identifier is the Amazon Resource Name (ARN) for the KMS encryption key. If you are creating a DB cluster with the same AWS account that owns the KMS encryption key used to encrypt the new DB cluster, then you can use the KMS key alias instead of the ARN for the KMS encryption key. If an encryption key is not specified in KmsKeyId:   If ReplicationSourceIdentifier identifies an encrypted source, then Amazon Neptune will use the encryption key used to encrypt the source. Otherwise, Amazon Neptune will use your default encryption key.   If the StorageEncrypted parameter is true and ReplicationSourceIdentifier is not specified, then Amazon Neptune will use your default encryption key.   AWS KMS creates the default encryption key for your AWS account. Your AWS account has a different default encryption key for each AWS Region. If you create a Read Replica of an encrypted DB cluster in another AWS Region, you must set KmsKeyId to a KMS key ID that is valid in the destination AWS Region. This key is used to encrypt the Read Replica in that AWS Region.
        public let kmsKeyId: String?
        /// The name of the master user for the DB cluster. Constraints:   Must be 1 to 16 letters or numbers.   First character must be a letter.   Cannot be a reserved word for the chosen database engine.
        public let masterUsername: String?
        /// The password for the master database user. This password can contain any printable ASCII character except "/", """, or "@". Constraints: Must contain from 8 to 41 characters.
        public let masterUserPassword: String?
        ///  (Not supported by Neptune)
        public let optionGroupName: String?
        /// The port number on which the instances in the DB cluster accept connections.  Default: 8182
        public let port: Int?
        /// The daily time range during which automated backups are created if automated backups are enabled using the BackupRetentionPeriod parameter. The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region. To see the time blocks available, see  Adjusting the Preferred Maintenance Window in the Amazon Neptune User Guide.  Constraints:   Must be in the format hh24:mi-hh24:mi.   Must be in Universal Coordinated Time (UTC).   Must not conflict with the preferred maintenance window.   Must be at least 30 minutes.
        public let preferredBackupWindow: String?
        /// The weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC). Format: ddd:hh24:mi-ddd:hh24:mi  The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region, occurring on a random day of the week. To see the time blocks available, see  Adjusting the Preferred Maintenance Window in the Amazon Neptune User Guide.  Valid Days: Mon, Tue, Wed, Thu, Fri, Sat, Sun. Constraints: Minimum 30-minute window.
        public let preferredMaintenanceWindow: String?
        /// This parameter is not currently supported.
        public let preSignedUrl: String?
        /// The Amazon Resource Name (ARN) of the source DB instance or DB cluster if this DB cluster is created as a Read Replica.
        public let replicationSourceIdentifier: String?
        /// Specifies whether the DB cluster is encrypted.
        public let storageEncrypted: Bool?
        /// The tags to assign to the new DB cluster.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?
        /// A list of EC2 VPC security groups to associate with this DB cluster.
        @OptionalCustomCoding<ArrayCoder<_VpcSecurityGroupIdsEncoding, String>>
        public var vpcSecurityGroupIds: [String]?

        public init(availabilityZones: [String]? = nil, backupRetentionPeriod: Int? = nil, characterSetName: String? = nil, databaseName: String? = nil, dBClusterIdentifier: String, dBClusterParameterGroupName: String? = nil, dBSubnetGroupName: String? = nil, deletionProtection: Bool? = nil, enableCloudwatchLogsExports: [String]? = nil, enableIAMDatabaseAuthentication: Bool? = nil, engine: String, engineVersion: String? = nil, kmsKeyId: String? = nil, masterUsername: String? = nil, masterUserPassword: String? = nil, optionGroupName: String? = nil, port: Int? = nil, preferredBackupWindow: String? = nil, preferredMaintenanceWindow: String? = nil, preSignedUrl: String? = nil, replicationSourceIdentifier: String? = nil, storageEncrypted: Bool? = nil, tags: [Tag]? = nil, vpcSecurityGroupIds: [String]? = nil) {
            self.availabilityZones = availabilityZones
            self.backupRetentionPeriod = backupRetentionPeriod
            self.characterSetName = characterSetName
            self.databaseName = databaseName
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.dBSubnetGroupName = dBSubnetGroupName
            self.deletionProtection = deletionProtection
            self.enableCloudwatchLogsExports = enableCloudwatchLogsExports
            self.enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication
            self.engine = engine
            self.engineVersion = engineVersion
            self.kmsKeyId = kmsKeyId
            self.masterUsername = masterUsername
            self.masterUserPassword = masterUserPassword
            self.optionGroupName = optionGroupName
            self.port = port
            self.preferredBackupWindow = preferredBackupWindow
            self.preferredMaintenanceWindow = preferredMaintenanceWindow
            self.preSignedUrl = preSignedUrl
            self.replicationSourceIdentifier = replicationSourceIdentifier
            self.storageEncrypted = storageEncrypted
            self.tags = tags
            self.vpcSecurityGroupIds = vpcSecurityGroupIds
        }

        private enum CodingKeys: String, CodingKey {
            case availabilityZones = "AvailabilityZones"
            case backupRetentionPeriod = "BackupRetentionPeriod"
            case characterSetName = "CharacterSetName"
            case databaseName = "DatabaseName"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case dBSubnetGroupName = "DBSubnetGroupName"
            case deletionProtection = "DeletionProtection"
            case enableCloudwatchLogsExports = "EnableCloudwatchLogsExports"
            case enableIAMDatabaseAuthentication = "EnableIAMDatabaseAuthentication"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case kmsKeyId = "KmsKeyId"
            case masterUsername = "MasterUsername"
            case masterUserPassword = "MasterUserPassword"
            case optionGroupName = "OptionGroupName"
            case port = "Port"
            case preferredBackupWindow = "PreferredBackupWindow"
            case preferredMaintenanceWindow = "PreferredMaintenanceWindow"
            case preSignedUrl = "PreSignedUrl"
            case replicationSourceIdentifier = "ReplicationSourceIdentifier"
            case storageEncrypted = "StorageEncrypted"
            case tags = "Tags"
            case vpcSecurityGroupIds = "VpcSecurityGroupIds"
        }
    }

    public struct CreateDBClusterParameterGroupMessage: AWSEncodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// The name of the DB cluster parameter group. Constraints:   Must match the name of an existing DBClusterParameterGroup.    This value is stored as a lowercase string.
        public let dBClusterParameterGroupName: String
        /// The DB cluster parameter group family name. A DB cluster parameter group can be associated with one and only one DB cluster parameter group family, and can be applied only to a DB cluster running a database engine and engine version compatible with that DB cluster parameter group family.
        public let dBParameterGroupFamily: String
        /// The description for the DB cluster parameter group.
        public let description: String
        /// The tags to be assigned to the new DB cluster parameter group.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?

        public init(dBClusterParameterGroupName: String, dBParameterGroupFamily: String, description: String, tags: [Tag]? = nil) {
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.dBParameterGroupFamily = dBParameterGroupFamily
            self.description = description
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case dBParameterGroupFamily = "DBParameterGroupFamily"
            case description = "Description"
            case tags = "Tags"
        }
    }

    public struct CreateDBClusterParameterGroupResult: AWSDecodableShape {
        public let dBClusterParameterGroup: DBClusterParameterGroup?

        public init(dBClusterParameterGroup: DBClusterParameterGroup? = nil) {
            self.dBClusterParameterGroup = dBClusterParameterGroup
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroup = "DBClusterParameterGroup"
        }
    }

    public struct CreateDBClusterResult: AWSDecodableShape {
        public let dBCluster: DBCluster?

        public init(dBCluster: DBCluster? = nil) {
            self.dBCluster = dBCluster
        }

        private enum CodingKeys: String, CodingKey {
            case dBCluster = "DBCluster"
        }
    }

    public struct CreateDBClusterSnapshotMessage: AWSEncodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// The identifier of the DB cluster to create a snapshot for. This parameter is not case-sensitive. Constraints:   Must match the identifier of an existing DBCluster.   Example: my-cluster1
        public let dBClusterIdentifier: String
        /// The identifier of the DB cluster snapshot. This parameter is stored as a lowercase string. Constraints:   Must contain from 1 to 63 letters, numbers, or hyphens.   First character must be a letter.   Cannot end with a hyphen or contain two consecutive hyphens.   Example: my-cluster1-snapshot1
        public let dBClusterSnapshotIdentifier: String
        /// The tags to be assigned to the DB cluster snapshot.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?

        public init(dBClusterIdentifier: String, dBClusterSnapshotIdentifier: String, tags: [Tag]? = nil) {
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBClusterSnapshotIdentifier = dBClusterSnapshotIdentifier
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBClusterSnapshotIdentifier = "DBClusterSnapshotIdentifier"
            case tags = "Tags"
        }
    }

    public struct CreateDBClusterSnapshotResult: AWSDecodableShape {
        public let dBClusterSnapshot: DBClusterSnapshot?

        public init(dBClusterSnapshot: DBClusterSnapshot? = nil) {
            self.dBClusterSnapshot = dBClusterSnapshot
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterSnapshot = "DBClusterSnapshot"
        }
    }

    public struct CreateDBInstanceMessage: AWSEncodableShape {
        public struct _DBSecurityGroupsEncoding: ArrayCoderProperties { public static let member = "DBSecurityGroupName" }
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }
        public struct _VpcSecurityGroupIdsEncoding: ArrayCoderProperties { public static let member = "VpcSecurityGroupId" }

        /// The amount of storage (in gibibytes) to allocate for the DB instance. Type: Integer Not applicable. Neptune cluster volumes automatically grow as the amount of data in your database increases, though you are only charged for the space that you use in a Neptune cluster volume.
        public let allocatedStorage: Int?
        /// Indicates that minor engine upgrades are applied automatically to the DB instance during the maintenance window. Default: true
        public let autoMinorVersionUpgrade: Bool?
        ///  The EC2 Availability Zone that the DB instance is created in Default: A random, system-chosen Availability Zone in the endpoint's AWS Region.  Example: us-east-1d   Constraint: The AvailabilityZone parameter can't be specified if the MultiAZ parameter is set to true. The specified Availability Zone must be in the same AWS Region as the current endpoint.
        public let availabilityZone: String?
        /// The number of days for which automated backups are retained. Not applicable. The retention period for automated backups is managed by the DB cluster. For more information, see CreateDBCluster. Default: 1 Constraints:   Must be a value from 0 to 35   Cannot be set to 0 if the DB instance is a source to Read Replicas
        public let backupRetentionPeriod: Int?
        ///  (Not supported by Neptune)
        public let characterSetName: String?
        /// True to copy all tags from the DB instance to snapshots of the DB instance, and otherwise false. The default is false.
        public let copyTagsToSnapshot: Bool?
        /// The identifier of the DB cluster that the instance will belong to. For information on creating a DB cluster, see CreateDBCluster. Type: String
        public let dBClusterIdentifier: String?
        /// The compute and memory capacity of the DB instance, for example, db.m4.large. Not all DB instance classes are available in all AWS Regions.
        public let dBInstanceClass: String
        /// The DB instance identifier. This parameter is stored as a lowercase string. Constraints:   Must contain from 1 to 63 letters, numbers, or hyphens.   First character must be a letter.   Cannot end with a hyphen or contain two consecutive hyphens.   Example: mydbinstance
        public let dBInstanceIdentifier: String
        /// Not supported.
        public let dBName: String?
        /// The name of the DB parameter group to associate with this DB instance. If this argument is omitted, the default DBParameterGroup for the specified engine is used. Constraints:   Must be 1 to 255 letters, numbers, or hyphens.   First character must be a letter   Cannot end with a hyphen or contain two consecutive hyphens
        public let dBParameterGroupName: String?
        /// A list of DB security groups to associate with this DB instance. Default: The default DB security group for the database engine.
        @OptionalCustomCoding<ArrayCoder<_DBSecurityGroupsEncoding, String>>
        public var dBSecurityGroups: [String]?
        /// A DB subnet group to associate with this DB instance. If there is no DB subnet group, then it is a non-VPC DB instance.
        public let dBSubnetGroupName: String?
        /// A value that indicates whether the DB instance has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection is disabled. See Deleting a DB Instance. DB instances in a DB cluster can be deleted even when deletion protection is enabled in their parent DB cluster.
        public let deletionProtection: Bool?
        /// Specify the Active Directory Domain to create the instance in.
        public let domain: String?
        /// Specify the name of the IAM role to be used when making API calls to the Directory Service.
        public let domainIAMRoleName: String?
        /// The list of log types that need to be enabled for exporting to CloudWatch Logs.
        @OptionalCustomCoding<StandardArrayCoder>
        public var enableCloudwatchLogsExports: [String]?
        /// True to enable AWS Identity and Access Management (IAM) authentication for Neptune. Default: false
        public let enableIAMDatabaseAuthentication: Bool?
        ///  (Not supported by Neptune)
        public let enablePerformanceInsights: Bool?
        /// The name of the database engine to be used for this instance. Valid Values: neptune
        public let engine: String
        /// The version number of the database engine to use. Currently, setting this parameter has no effect.
        public let engineVersion: String?
        /// The amount of Provisioned IOPS (input/output operations per second) to be initially allocated for the DB instance.
        public let iops: Int?
        /// The AWS KMS key identifier for an encrypted DB instance. The KMS key identifier is the Amazon Resource Name (ARN) for the KMS encryption key. If you are creating a DB instance with the same AWS account that owns the KMS encryption key used to encrypt the new DB instance, then you can use the KMS key alias instead of the ARN for the KM encryption key. Not applicable. The KMS key identifier is managed by the DB cluster. For more information, see CreateDBCluster. If the StorageEncrypted parameter is true, and you do not specify a value for the KmsKeyId parameter, then Amazon Neptune will use your default encryption key. AWS KMS creates the default encryption key for your AWS account. Your AWS account has a different default encryption key for each AWS Region.
        public let kmsKeyId: String?
        /// License model information for this DB instance.  Valid values: license-included | bring-your-own-license | general-public-license
        public let licenseModel: String?
        /// The name for the master user. Not used.
        public let masterUsername: String?
        /// The password for the master user. The password can include any printable ASCII character except "/", """, or "@".  Not used.
        public let masterUserPassword: String?
        /// The interval, in seconds, between points when Enhanced Monitoring metrics are collected for the DB instance. To disable collecting Enhanced Monitoring metrics, specify 0. The default is 0. If MonitoringRoleArn is specified, then you must also set MonitoringInterval to a value other than 0. Valid Values: 0, 1, 5, 10, 15, 30, 60
        public let monitoringInterval: Int?
        /// The ARN for the IAM role that permits Neptune to send enhanced monitoring metrics to Amazon CloudWatch Logs. For example, arn:aws:iam:123456789012:role/emaccess. If MonitoringInterval is set to a value other than 0, then you must supply a MonitoringRoleArn value.
        public let monitoringRoleArn: String?
        /// Specifies if the DB instance is a Multi-AZ deployment. You can't set the AvailabilityZone parameter if the MultiAZ parameter is set to true.
        public let multiAZ: Bool?
        ///  (Not supported by Neptune)
        public let optionGroupName: String?
        ///  (Not supported by Neptune)
        public let performanceInsightsKMSKeyId: String?
        /// The port number on which the database accepts connections. Not applicable. The port is managed by the DB cluster. For more information, see CreateDBCluster.  Default: 8182  Type: Integer
        public let port: Int?
        ///  The daily time range during which automated backups are created. Not applicable. The daily time range for creating automated backups is managed by the DB cluster. For more information, see CreateDBCluster.
        public let preferredBackupWindow: String?
        /// The time range each week during which system maintenance can occur, in Universal Coordinated Time (UTC).  Format: ddd:hh24:mi-ddd:hh24:mi  The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region, occurring on a random day of the week. Valid Days: Mon, Tue, Wed, Thu, Fri, Sat, Sun. Constraints: Minimum 30-minute window.
        public let preferredMaintenanceWindow: String?
        /// A value that specifies the order in which an Read Replica is promoted to the primary instance after a failure of the existing primary instance.  Default: 1 Valid Values: 0 - 15
        public let promotionTier: Int?
        /// Specifies whether the DB instance is encrypted. Not applicable. The encryption for DB instances is managed by the DB cluster. For more information, see CreateDBCluster. Default: false
        public let storageEncrypted: Bool?
        /// Specifies the storage type to be associated with the DB instance. Not applicable. Storage is managed by the DB Cluster.
        public let storageType: String?
        /// The tags to assign to the new instance.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?
        /// The ARN from the key store with which to associate the instance for TDE encryption.
        public let tdeCredentialArn: String?
        /// The password for the given ARN from the key store in order to access the device.
        public let tdeCredentialPassword: String?
        /// The time zone of the DB instance.
        public let timezone: String?
        /// A list of EC2 VPC security groups to associate with this DB instance. Not applicable. The associated list of EC2 VPC security groups is managed by the DB cluster. For more information, see CreateDBCluster. Default: The default EC2 VPC security group for the DB subnet group's VPC.
        @OptionalCustomCoding<ArrayCoder<_VpcSecurityGroupIdsEncoding, String>>
        public var vpcSecurityGroupIds: [String]?

        public init(allocatedStorage: Int? = nil, autoMinorVersionUpgrade: Bool? = nil, availabilityZone: String? = nil, backupRetentionPeriod: Int? = nil, characterSetName: String? = nil, copyTagsToSnapshot: Bool? = nil, dBClusterIdentifier: String? = nil, dBInstanceClass: String, dBInstanceIdentifier: String, dBName: String? = nil, dBParameterGroupName: String? = nil, dBSecurityGroups: [String]? = nil, dBSubnetGroupName: String? = nil, deletionProtection: Bool? = nil, domain: String? = nil, domainIAMRoleName: String? = nil, enableCloudwatchLogsExports: [String]? = nil, enableIAMDatabaseAuthentication: Bool? = nil, enablePerformanceInsights: Bool? = nil, engine: String, engineVersion: String? = nil, iops: Int? = nil, kmsKeyId: String? = nil, licenseModel: String? = nil, masterUsername: String? = nil, masterUserPassword: String? = nil, monitoringInterval: Int? = nil, monitoringRoleArn: String? = nil, multiAZ: Bool? = nil, optionGroupName: String? = nil, performanceInsightsKMSKeyId: String? = nil, port: Int? = nil, preferredBackupWindow: String? = nil, preferredMaintenanceWindow: String? = nil, promotionTier: Int? = nil, storageEncrypted: Bool? = nil, storageType: String? = nil, tags: [Tag]? = nil, tdeCredentialArn: String? = nil, tdeCredentialPassword: String? = nil, timezone: String? = nil, vpcSecurityGroupIds: [String]? = nil) {
            self.allocatedStorage = allocatedStorage
            self.autoMinorVersionUpgrade = autoMinorVersionUpgrade
            self.availabilityZone = availabilityZone
            self.backupRetentionPeriod = backupRetentionPeriod
            self.characterSetName = characterSetName
            self.copyTagsToSnapshot = copyTagsToSnapshot
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBInstanceClass = dBInstanceClass
            self.dBInstanceIdentifier = dBInstanceIdentifier
            self.dBName = dBName
            self.dBParameterGroupName = dBParameterGroupName
            self.dBSecurityGroups = dBSecurityGroups
            self.dBSubnetGroupName = dBSubnetGroupName
            self.deletionProtection = deletionProtection
            self.domain = domain
            self.domainIAMRoleName = domainIAMRoleName
            self.enableCloudwatchLogsExports = enableCloudwatchLogsExports
            self.enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication
            self.enablePerformanceInsights = enablePerformanceInsights
            self.engine = engine
            self.engineVersion = engineVersion
            self.iops = iops
            self.kmsKeyId = kmsKeyId
            self.licenseModel = licenseModel
            self.masterUsername = masterUsername
            self.masterUserPassword = masterUserPassword
            self.monitoringInterval = monitoringInterval
            self.monitoringRoleArn = monitoringRoleArn
            self.multiAZ = multiAZ
            self.optionGroupName = optionGroupName
            self.performanceInsightsKMSKeyId = performanceInsightsKMSKeyId
            self.port = port
            self.preferredBackupWindow = preferredBackupWindow
            self.preferredMaintenanceWindow = preferredMaintenanceWindow
            self.promotionTier = promotionTier
            self.storageEncrypted = storageEncrypted
            self.storageType = storageType
            self.tags = tags
            self.tdeCredentialArn = tdeCredentialArn
            self.tdeCredentialPassword = tdeCredentialPassword
            self.timezone = timezone
            self.vpcSecurityGroupIds = vpcSecurityGroupIds
        }

        private enum CodingKeys: String, CodingKey {
            case allocatedStorage = "AllocatedStorage"
            case autoMinorVersionUpgrade = "AutoMinorVersionUpgrade"
            case availabilityZone = "AvailabilityZone"
            case backupRetentionPeriod = "BackupRetentionPeriod"
            case characterSetName = "CharacterSetName"
            case copyTagsToSnapshot = "CopyTagsToSnapshot"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBInstanceClass = "DBInstanceClass"
            case dBInstanceIdentifier = "DBInstanceIdentifier"
            case dBName = "DBName"
            case dBParameterGroupName = "DBParameterGroupName"
            case dBSecurityGroups = "DBSecurityGroups"
            case dBSubnetGroupName = "DBSubnetGroupName"
            case deletionProtection = "DeletionProtection"
            case domain = "Domain"
            case domainIAMRoleName = "DomainIAMRoleName"
            case enableCloudwatchLogsExports = "EnableCloudwatchLogsExports"
            case enableIAMDatabaseAuthentication = "EnableIAMDatabaseAuthentication"
            case enablePerformanceInsights = "EnablePerformanceInsights"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case iops = "Iops"
            case kmsKeyId = "KmsKeyId"
            case licenseModel = "LicenseModel"
            case masterUsername = "MasterUsername"
            case masterUserPassword = "MasterUserPassword"
            case monitoringInterval = "MonitoringInterval"
            case monitoringRoleArn = "MonitoringRoleArn"
            case multiAZ = "MultiAZ"
            case optionGroupName = "OptionGroupName"
            case performanceInsightsKMSKeyId = "PerformanceInsightsKMSKeyId"
            case port = "Port"
            case preferredBackupWindow = "PreferredBackupWindow"
            case preferredMaintenanceWindow = "PreferredMaintenanceWindow"
            case promotionTier = "PromotionTier"
            case storageEncrypted = "StorageEncrypted"
            case storageType = "StorageType"
            case tags = "Tags"
            case tdeCredentialArn = "TdeCredentialArn"
            case tdeCredentialPassword = "TdeCredentialPassword"
            case timezone = "Timezone"
            case vpcSecurityGroupIds = "VpcSecurityGroupIds"
        }
    }

    public struct CreateDBInstanceResult: AWSDecodableShape {
        public let dBInstance: DBInstance?

        public init(dBInstance: DBInstance? = nil) {
            self.dBInstance = dBInstance
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstance = "DBInstance"
        }
    }

    public struct CreateDBParameterGroupMessage: AWSEncodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// The DB parameter group family name. A DB parameter group can be associated with one and only one DB parameter group family, and can be applied only to a DB instance running a database engine and engine version compatible with that DB parameter group family.
        public let dBParameterGroupFamily: String
        /// The name of the DB parameter group. Constraints:   Must be 1 to 255 letters, numbers, or hyphens.   First character must be a letter   Cannot end with a hyphen or contain two consecutive hyphens    This value is stored as a lowercase string.
        public let dBParameterGroupName: String
        /// The description for the DB parameter group.
        public let description: String
        /// The tags to be assigned to the new DB parameter group.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?

        public init(dBParameterGroupFamily: String, dBParameterGroupName: String, description: String, tags: [Tag]? = nil) {
            self.dBParameterGroupFamily = dBParameterGroupFamily
            self.dBParameterGroupName = dBParameterGroupName
            self.description = description
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupFamily = "DBParameterGroupFamily"
            case dBParameterGroupName = "DBParameterGroupName"
            case description = "Description"
            case tags = "Tags"
        }
    }

    public struct CreateDBParameterGroupResult: AWSDecodableShape {
        public let dBParameterGroup: DBParameterGroup?

        public init(dBParameterGroup: DBParameterGroup? = nil) {
            self.dBParameterGroup = dBParameterGroup
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroup = "DBParameterGroup"
        }
    }

    public struct CreateDBSubnetGroupMessage: AWSEncodableShape {
        public struct _SubnetIdsEncoding: ArrayCoderProperties { public static let member = "SubnetIdentifier" }
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// The description for the DB subnet group.
        public let dBSubnetGroupDescription: String
        /// The name for the DB subnet group. This value is stored as a lowercase string. Constraints: Must contain no more than 255 letters, numbers, periods, underscores, spaces, or hyphens. Must not be default. Example: mySubnetgroup
        public let dBSubnetGroupName: String
        /// The EC2 Subnet IDs for the DB subnet group.
        @CustomCoding<ArrayCoder<_SubnetIdsEncoding, String>>
        public var subnetIds: [String]
        /// The tags to be assigned to the new DB subnet group.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?

        public init(dBSubnetGroupDescription: String, dBSubnetGroupName: String, subnetIds: [String], tags: [Tag]? = nil) {
            self.dBSubnetGroupDescription = dBSubnetGroupDescription
            self.dBSubnetGroupName = dBSubnetGroupName
            self.subnetIds = subnetIds
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case dBSubnetGroupDescription = "DBSubnetGroupDescription"
            case dBSubnetGroupName = "DBSubnetGroupName"
            case subnetIds = "SubnetIds"
            case tags = "Tags"
        }
    }

    public struct CreateDBSubnetGroupResult: AWSDecodableShape {
        public let dBSubnetGroup: DBSubnetGroup?

        public init(dBSubnetGroup: DBSubnetGroup? = nil) {
            self.dBSubnetGroup = dBSubnetGroup
        }

        private enum CodingKeys: String, CodingKey {
            case dBSubnetGroup = "DBSubnetGroup"
        }
    }

    public struct CreateEventSubscriptionMessage: AWSEncodableShape {
        public struct _EventCategoriesEncoding: ArrayCoderProperties { public static let member = "EventCategory" }
        public struct _SourceIdsEncoding: ArrayCoderProperties { public static let member = "SourceId" }
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }

        ///  A Boolean value; set to true to activate the subscription, set to false to create the subscription but not active it.
        public let enabled: Bool?
        ///  A list of event categories for a SourceType that you want to subscribe to. You can see a list of the categories for a given SourceType by using the DescribeEventCategories action.
        @OptionalCustomCoding<ArrayCoder<_EventCategoriesEncoding, String>>
        public var eventCategories: [String]?
        /// The Amazon Resource Name (ARN) of the SNS topic created for event notification. The ARN is created by Amazon SNS when you create a topic and subscribe to it.
        public let snsTopicArn: String
        /// The list of identifiers of the event sources for which events are returned. If not specified, then all sources are included in the response. An identifier must begin with a letter and must contain only ASCII letters, digits, and hyphens; it can't end with a hyphen or contain two consecutive hyphens. Constraints:   If SourceIds are supplied, SourceType must also be provided.   If the source type is a DB instance, then a DBInstanceIdentifier must be supplied.   If the source type is a DB security group, a DBSecurityGroupName must be supplied.   If the source type is a DB parameter group, a DBParameterGroupName must be supplied.   If the source type is a DB snapshot, a DBSnapshotIdentifier must be supplied.
        @OptionalCustomCoding<ArrayCoder<_SourceIdsEncoding, String>>
        public var sourceIds: [String]?
        /// The type of source that is generating the events. For example, if you want to be notified of events generated by a DB instance, you would set this parameter to db-instance. if this value is not specified, all events are returned. Valid values: db-instance | db-cluster | db-parameter-group | db-security-group | db-snapshot | db-cluster-snapshot
        public let sourceType: String?
        /// The name of the subscription. Constraints: The name must be less than 255 characters.
        public let subscriptionName: String
        /// The tags to be applied to the new event subscription.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?

        public init(enabled: Bool? = nil, eventCategories: [String]? = nil, snsTopicArn: String, sourceIds: [String]? = nil, sourceType: String? = nil, subscriptionName: String, tags: [Tag]? = nil) {
            self.enabled = enabled
            self.eventCategories = eventCategories
            self.snsTopicArn = snsTopicArn
            self.sourceIds = sourceIds
            self.sourceType = sourceType
            self.subscriptionName = subscriptionName
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case enabled = "Enabled"
            case eventCategories = "EventCategories"
            case snsTopicArn = "SnsTopicArn"
            case sourceIds = "SourceIds"
            case sourceType = "SourceType"
            case subscriptionName = "SubscriptionName"
            case tags = "Tags"
        }
    }

    public struct CreateEventSubscriptionResult: AWSDecodableShape {
        public let eventSubscription: EventSubscription?

        public init(eventSubscription: EventSubscription? = nil) {
            self.eventSubscription = eventSubscription
        }

        private enum CodingKeys: String, CodingKey {
            case eventSubscription = "EventSubscription"
        }
    }

    public struct DBCluster: AWSDecodableShape {
        public struct _AssociatedRolesEncoding: ArrayCoderProperties { public static let member = "DBClusterRole" }
        public struct _AvailabilityZonesEncoding: ArrayCoderProperties { public static let member = "AvailabilityZone" }
        public struct _DBClusterMembersEncoding: ArrayCoderProperties { public static let member = "DBClusterMember" }
        public struct _DBClusterOptionGroupMembershipsEncoding: ArrayCoderProperties { public static let member = "DBClusterOptionGroup" }
        public struct _ReadReplicaIdentifiersEncoding: ArrayCoderProperties { public static let member = "ReadReplicaIdentifier" }
        public struct _VpcSecurityGroupsEncoding: ArrayCoderProperties { public static let member = "VpcSecurityGroupMembership" }

        ///  AllocatedStorage always returns 1, because Neptune DB cluster storage size is not fixed, but instead automatically adjusts as needed.
        public let allocatedStorage: Int?
        /// Provides a list of the AWS Identity and Access Management (IAM) roles that are associated with the DB cluster. IAM roles that are associated with a DB cluster grant permission for the DB cluster to access other AWS services on your behalf.
        @OptionalCustomCoding<ArrayCoder<_AssociatedRolesEncoding, DBClusterRole>>
        public var associatedRoles: [DBClusterRole]?
        /// Provides the list of EC2 Availability Zones that instances in the DB cluster can be created in.
        @OptionalCustomCoding<ArrayCoder<_AvailabilityZonesEncoding, String>>
        public var availabilityZones: [String]?
        /// Specifies the number of days for which automatic DB snapshots are retained.
        public let backupRetentionPeriod: Int?
        ///  (Not supported by Neptune)
        public let characterSetName: String?
        /// Identifies the clone group to which the DB cluster is associated.
        public let cloneGroupId: String?
        /// Specifies the time when the DB cluster was created, in Universal Coordinated Time (UTC).
        public let clusterCreateTime: Date?
        /// Contains the name of the initial database of this DB cluster that was provided at create time, if one was specified when the DB cluster was created. This same name is returned for the life of the DB cluster.
        public let databaseName: String?
        /// The Amazon Resource Name (ARN) for the DB cluster.
        public let dBClusterArn: String?
        /// Contains a user-supplied DB cluster identifier. This identifier is the unique key that identifies a DB cluster.
        public let dBClusterIdentifier: String?
        /// Provides the list of instances that make up the DB cluster.
        @OptionalCustomCoding<ArrayCoder<_DBClusterMembersEncoding, DBClusterMember>>
        public var dBClusterMembers: [DBClusterMember]?
        ///  (Not supported by Neptune)
        @OptionalCustomCoding<ArrayCoder<_DBClusterOptionGroupMembershipsEncoding, DBClusterOptionGroupStatus>>
        public var dBClusterOptionGroupMemberships: [DBClusterOptionGroupStatus]?
        /// Specifies the name of the DB cluster parameter group for the DB cluster.
        public let dBClusterParameterGroup: String?
        /// The AWS Region-unique, immutable identifier for the DB cluster. This identifier is found in AWS CloudTrail log entries whenever the AWS KMS key for the DB cluster is accessed.
        public let dbClusterResourceId: String?
        /// Specifies information on the subnet group associated with the DB cluster, including the name, description, and subnets in the subnet group.
        public let dBSubnetGroup: String?
        /// Indicates whether or not the DB cluster has deletion protection enabled. The database can't be deleted when deletion protection is enabled.
        public let deletionProtection: Bool?
        /// Specifies the earliest time to which a database can be restored with point-in-time restore.
        public let earliestRestorableTime: Date?
        /// A list of log types that this DB cluster is configured to export to CloudWatch Logs.
        @OptionalCustomCoding<StandardArrayCoder>
        public var enabledCloudwatchLogsExports: [String]?
        /// Specifies the connection endpoint for the primary instance of the DB cluster.
        public let endpoint: String?
        /// Provides the name of the database engine to be used for this DB cluster.
        public let engine: String?
        /// Indicates the database engine version.
        public let engineVersion: String?
        /// Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
        public let hostedZoneId: String?
        /// True if mapping of AWS Identity and Access Management (IAM) accounts to database accounts is enabled, and otherwise false.
        public let iAMDatabaseAuthenticationEnabled: Bool?
        /// If StorageEncrypted is true, the AWS KMS key identifier for the encrypted DB cluster.
        public let kmsKeyId: String?
        /// Specifies the latest time to which a database can be restored with point-in-time restore.
        public let latestRestorableTime: Date?
        /// Contains the master username for the DB cluster.
        public let masterUsername: String?
        /// Specifies whether the DB cluster has instances in multiple Availability Zones.
        public let multiAZ: Bool?
        /// Specifies the progress of the operation as a percentage.
        public let percentProgress: String?
        /// Specifies the port that the database engine is listening on.
        public let port: Int?
        /// Specifies the daily time range during which automated backups are created if automated backups are enabled, as determined by the BackupRetentionPeriod.
        public let preferredBackupWindow: String?
        /// Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC).
        public let preferredMaintenanceWindow: String?
        /// The reader endpoint for the DB cluster. The reader endpoint for a DB cluster load-balances connections across the Read Replicas that are available in a DB cluster. As clients request new connections to the reader endpoint, Neptune distributes the connection requests among the Read Replicas in the DB cluster. This functionality can help balance your read workload across multiple Read Replicas in your DB cluster. If a failover occurs, and the Read Replica that you are connected to is promoted to be the primary instance, your connection is dropped. To continue sending your read workload to other Read Replicas in the cluster, you can then reconnect to the reader endpoint.
        public let readerEndpoint: String?
        /// Contains one or more identifiers of the Read Replicas associated with this DB cluster.
        @OptionalCustomCoding<ArrayCoder<_ReadReplicaIdentifiersEncoding, String>>
        public var readReplicaIdentifiers: [String]?
        /// Not supported by Neptune.
        public let replicationSourceIdentifier: String?
        /// Specifies the current state of this DB cluster.
        public let status: String?
        /// Specifies whether the DB cluster is encrypted.
        public let storageEncrypted: Bool?
        /// Provides a list of VPC security groups that the DB cluster belongs to.
        @OptionalCustomCoding<ArrayCoder<_VpcSecurityGroupsEncoding, VpcSecurityGroupMembership>>
        public var vpcSecurityGroups: [VpcSecurityGroupMembership]?

        public init(allocatedStorage: Int? = nil, associatedRoles: [DBClusterRole]? = nil, availabilityZones: [String]? = nil, backupRetentionPeriod: Int? = nil, characterSetName: String? = nil, cloneGroupId: String? = nil, clusterCreateTime: Date? = nil, databaseName: String? = nil, dBClusterArn: String? = nil, dBClusterIdentifier: String? = nil, dBClusterMembers: [DBClusterMember]? = nil, dBClusterOptionGroupMemberships: [DBClusterOptionGroupStatus]? = nil, dBClusterParameterGroup: String? = nil, dbClusterResourceId: String? = nil, dBSubnetGroup: String? = nil, deletionProtection: Bool? = nil, earliestRestorableTime: Date? = nil, enabledCloudwatchLogsExports: [String]? = nil, endpoint: String? = nil, engine: String? = nil, engineVersion: String? = nil, hostedZoneId: String? = nil, iAMDatabaseAuthenticationEnabled: Bool? = nil, kmsKeyId: String? = nil, latestRestorableTime: Date? = nil, masterUsername: String? = nil, multiAZ: Bool? = nil, percentProgress: String? = nil, port: Int? = nil, preferredBackupWindow: String? = nil, preferredMaintenanceWindow: String? = nil, readerEndpoint: String? = nil, readReplicaIdentifiers: [String]? = nil, replicationSourceIdentifier: String? = nil, status: String? = nil, storageEncrypted: Bool? = nil, vpcSecurityGroups: [VpcSecurityGroupMembership]? = nil) {
            self.allocatedStorage = allocatedStorage
            self.associatedRoles = associatedRoles
            self.availabilityZones = availabilityZones
            self.backupRetentionPeriod = backupRetentionPeriod
            self.characterSetName = characterSetName
            self.cloneGroupId = cloneGroupId
            self.clusterCreateTime = clusterCreateTime
            self.databaseName = databaseName
            self.dBClusterArn = dBClusterArn
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBClusterMembers = dBClusterMembers
            self.dBClusterOptionGroupMemberships = dBClusterOptionGroupMemberships
            self.dBClusterParameterGroup = dBClusterParameterGroup
            self.dbClusterResourceId = dbClusterResourceId
            self.dBSubnetGroup = dBSubnetGroup
            self.deletionProtection = deletionProtection
            self.earliestRestorableTime = earliestRestorableTime
            self.enabledCloudwatchLogsExports = enabledCloudwatchLogsExports
            self.endpoint = endpoint
            self.engine = engine
            self.engineVersion = engineVersion
            self.hostedZoneId = hostedZoneId
            self.iAMDatabaseAuthenticationEnabled = iAMDatabaseAuthenticationEnabled
            self.kmsKeyId = kmsKeyId
            self.latestRestorableTime = latestRestorableTime
            self.masterUsername = masterUsername
            self.multiAZ = multiAZ
            self.percentProgress = percentProgress
            self.port = port
            self.preferredBackupWindow = preferredBackupWindow
            self.preferredMaintenanceWindow = preferredMaintenanceWindow
            self.readerEndpoint = readerEndpoint
            self.readReplicaIdentifiers = readReplicaIdentifiers
            self.replicationSourceIdentifier = replicationSourceIdentifier
            self.status = status
            self.storageEncrypted = storageEncrypted
            self.vpcSecurityGroups = vpcSecurityGroups
        }

        private enum CodingKeys: String, CodingKey {
            case allocatedStorage = "AllocatedStorage"
            case associatedRoles = "AssociatedRoles"
            case availabilityZones = "AvailabilityZones"
            case backupRetentionPeriod = "BackupRetentionPeriod"
            case characterSetName = "CharacterSetName"
            case cloneGroupId = "CloneGroupId"
            case clusterCreateTime = "ClusterCreateTime"
            case databaseName = "DatabaseName"
            case dBClusterArn = "DBClusterArn"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBClusterMembers = "DBClusterMembers"
            case dBClusterOptionGroupMemberships = "DBClusterOptionGroupMemberships"
            case dBClusterParameterGroup = "DBClusterParameterGroup"
            case dbClusterResourceId = "DbClusterResourceId"
            case dBSubnetGroup = "DBSubnetGroup"
            case deletionProtection = "DeletionProtection"
            case earliestRestorableTime = "EarliestRestorableTime"
            case enabledCloudwatchLogsExports = "EnabledCloudwatchLogsExports"
            case endpoint = "Endpoint"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case hostedZoneId = "HostedZoneId"
            case iAMDatabaseAuthenticationEnabled = "IAMDatabaseAuthenticationEnabled"
            case kmsKeyId = "KmsKeyId"
            case latestRestorableTime = "LatestRestorableTime"
            case masterUsername = "MasterUsername"
            case multiAZ = "MultiAZ"
            case percentProgress = "PercentProgress"
            case port = "Port"
            case preferredBackupWindow = "PreferredBackupWindow"
            case preferredMaintenanceWindow = "PreferredMaintenanceWindow"
            case readerEndpoint = "ReaderEndpoint"
            case readReplicaIdentifiers = "ReadReplicaIdentifiers"
            case replicationSourceIdentifier = "ReplicationSourceIdentifier"
            case status = "Status"
            case storageEncrypted = "StorageEncrypted"
            case vpcSecurityGroups = "VpcSecurityGroups"
        }
    }

    public struct DBClusterEndpoint: AWSDecodableShape {
        /// The type associated with a custom endpoint. One of: READER, WRITER, ANY.
        public let customEndpointType: String?
        /// The Amazon Resource Name (ARN) for the endpoint.
        public let dBClusterEndpointArn: String?
        /// The identifier associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterEndpointIdentifier: String?
        /// A unique system-generated identifier for an endpoint. It remains the same for the whole life of the endpoint.
        public let dBClusterEndpointResourceIdentifier: String?
        /// The DB cluster identifier of the DB cluster associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterIdentifier: String?
        /// The DNS address of the endpoint.
        public let endpoint: String?
        /// The type of the endpoint. One of: READER, WRITER, CUSTOM.
        public let endpointType: String?
        /// List of DB instance identifiers that aren't part of the custom endpoint group. All other eligible instances are reachable through the custom endpoint. Only relevant if the list of static members is empty.
        @OptionalCustomCoding<StandardArrayCoder>
        public var excludedMembers: [String]?
        /// List of DB instance identifiers that are part of the custom endpoint group.
        @OptionalCustomCoding<StandardArrayCoder>
        public var staticMembers: [String]?
        /// The current status of the endpoint. One of: creating, available, deleting, inactive, modifying. The inactive state applies to an endpoint that cannot be used for a certain kind of cluster, such as a writer endpoint for a read-only secondary cluster in a global database.
        public let status: String?

        public init(customEndpointType: String? = nil, dBClusterEndpointArn: String? = nil, dBClusterEndpointIdentifier: String? = nil, dBClusterEndpointResourceIdentifier: String? = nil, dBClusterIdentifier: String? = nil, endpoint: String? = nil, endpointType: String? = nil, excludedMembers: [String]? = nil, staticMembers: [String]? = nil, status: String? = nil) {
            self.customEndpointType = customEndpointType
            self.dBClusterEndpointArn = dBClusterEndpointArn
            self.dBClusterEndpointIdentifier = dBClusterEndpointIdentifier
            self.dBClusterEndpointResourceIdentifier = dBClusterEndpointResourceIdentifier
            self.dBClusterIdentifier = dBClusterIdentifier
            self.endpoint = endpoint
            self.endpointType = endpointType
            self.excludedMembers = excludedMembers
            self.staticMembers = staticMembers
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case customEndpointType = "CustomEndpointType"
            case dBClusterEndpointArn = "DBClusterEndpointArn"
            case dBClusterEndpointIdentifier = "DBClusterEndpointIdentifier"
            case dBClusterEndpointResourceIdentifier = "DBClusterEndpointResourceIdentifier"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case endpoint = "Endpoint"
            case endpointType = "EndpointType"
            case excludedMembers = "ExcludedMembers"
            case staticMembers = "StaticMembers"
            case status = "Status"
        }
    }

    public struct DBClusterEndpointMessage: AWSDecodableShape {
        public struct _DBClusterEndpointsEncoding: ArrayCoderProperties { public static let member = "DBClusterEndpointList" }

        /// Contains the details of the endpoints associated with the cluster and matching any filter conditions.
        @OptionalCustomCoding<ArrayCoder<_DBClusterEndpointsEncoding, DBClusterEndpoint>>
        public var dBClusterEndpoints: [DBClusterEndpoint]?
        ///  An optional pagination token provided by a previous DescribeDBClusterEndpoints request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?

        public init(dBClusterEndpoints: [DBClusterEndpoint]? = nil, marker: String? = nil) {
            self.dBClusterEndpoints = dBClusterEndpoints
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterEndpoints = "DBClusterEndpoints"
            case marker = "Marker"
        }
    }

    public struct DBClusterMember: AWSDecodableShape {
        /// Specifies the status of the DB cluster parameter group for this member of the DB cluster.
        public let dBClusterParameterGroupStatus: String?
        /// Specifies the instance identifier for this member of the DB cluster.
        public let dBInstanceIdentifier: String?
        /// Value that is true if the cluster member is the primary instance for the DB cluster and false otherwise.
        public let isClusterWriter: Bool?
        /// A value that specifies the order in which a Read Replica is promoted to the primary instance after a failure of the existing primary instance.
        public let promotionTier: Int?

        public init(dBClusterParameterGroupStatus: String? = nil, dBInstanceIdentifier: String? = nil, isClusterWriter: Bool? = nil, promotionTier: Int? = nil) {
            self.dBClusterParameterGroupStatus = dBClusterParameterGroupStatus
            self.dBInstanceIdentifier = dBInstanceIdentifier
            self.isClusterWriter = isClusterWriter
            self.promotionTier = promotionTier
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroupStatus = "DBClusterParameterGroupStatus"
            case dBInstanceIdentifier = "DBInstanceIdentifier"
            case isClusterWriter = "IsClusterWriter"
            case promotionTier = "PromotionTier"
        }
    }

    public struct DBClusterMessage: AWSDecodableShape {
        public struct _DBClustersEncoding: ArrayCoderProperties { public static let member = "DBCluster" }

        /// Contains a list of DB clusters for the user.
        @OptionalCustomCoding<ArrayCoder<_DBClustersEncoding, DBCluster>>
        public var dBClusters: [DBCluster]?
        /// A pagination token that can be used in a subsequent DescribeDBClusters request.
        public let marker: String?

        public init(dBClusters: [DBCluster]? = nil, marker: String? = nil) {
            self.dBClusters = dBClusters
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusters = "DBClusters"
            case marker = "Marker"
        }
    }

    public struct DBClusterOptionGroupStatus: AWSDecodableShape {
        /// Specifies the name of the DB cluster option group.
        public let dBClusterOptionGroupName: String?
        /// Specifies the status of the DB cluster option group.
        public let status: String?

        public init(dBClusterOptionGroupName: String? = nil, status: String? = nil) {
            self.dBClusterOptionGroupName = dBClusterOptionGroupName
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterOptionGroupName = "DBClusterOptionGroupName"
            case status = "Status"
        }
    }

    public struct DBClusterParameterGroup: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) for the DB cluster parameter group.
        public let dBClusterParameterGroupArn: String?
        /// Provides the name of the DB cluster parameter group.
        public let dBClusterParameterGroupName: String?
        /// Provides the name of the DB parameter group family that this DB cluster parameter group is compatible with.
        public let dBParameterGroupFamily: String?
        /// Provides the customer-specified description for this DB cluster parameter group.
        public let description: String?

        public init(dBClusterParameterGroupArn: String? = nil, dBClusterParameterGroupName: String? = nil, dBParameterGroupFamily: String? = nil, description: String? = nil) {
            self.dBClusterParameterGroupArn = dBClusterParameterGroupArn
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.dBParameterGroupFamily = dBParameterGroupFamily
            self.description = description
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroupArn = "DBClusterParameterGroupArn"
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case dBParameterGroupFamily = "DBParameterGroupFamily"
            case description = "Description"
        }
    }

    public struct DBClusterParameterGroupDetails: AWSDecodableShape {
        public struct _ParametersEncoding: ArrayCoderProperties { public static let member = "Parameter" }

        ///  An optional pagination token provided by a previous DescribeDBClusterParameters request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords .
        public let marker: String?
        /// Provides a list of parameters for the DB cluster parameter group.
        @OptionalCustomCoding<ArrayCoder<_ParametersEncoding, Parameter>>
        public var parameters: [Parameter]?

        public init(marker: String? = nil, parameters: [Parameter]? = nil) {
            self.marker = marker
            self.parameters = parameters
        }

        private enum CodingKeys: String, CodingKey {
            case marker = "Marker"
            case parameters = "Parameters"
        }
    }

    public struct DBClusterParameterGroupNameMessage: AWSDecodableShape {
        /// The name of the DB cluster parameter group. Constraints:   Must be 1 to 255 letters or numbers.   First character must be a letter   Cannot end with a hyphen or contain two consecutive hyphens    This value is stored as a lowercase string.
        public let dBClusterParameterGroupName: String?

        public init(dBClusterParameterGroupName: String? = nil) {
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
        }
    }

    public struct DBClusterParameterGroupsMessage: AWSDecodableShape {
        public struct _DBClusterParameterGroupsEncoding: ArrayCoderProperties { public static let member = "DBClusterParameterGroup" }

        /// A list of DB cluster parameter groups.
        @OptionalCustomCoding<ArrayCoder<_DBClusterParameterGroupsEncoding, DBClusterParameterGroup>>
        public var dBClusterParameterGroups: [DBClusterParameterGroup]?
        ///  An optional pagination token provided by a previous DescribeDBClusterParameterGroups request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?

        public init(dBClusterParameterGroups: [DBClusterParameterGroup]? = nil, marker: String? = nil) {
            self.dBClusterParameterGroups = dBClusterParameterGroups
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroups = "DBClusterParameterGroups"
            case marker = "Marker"
        }
    }

    public struct DBClusterRole: AWSDecodableShape {
        /// The name of the feature associated with the AWS Identity and Access Management (IAM) role. For the list of supported feature names, see DBEngineVersion.
        public let featureName: String?
        /// The Amazon Resource Name (ARN) of the IAM role that is associated with the DB cluster.
        public let roleArn: String?
        /// Describes the state of association between the IAM role and the DB cluster. The Status property returns one of the following values:    ACTIVE - the IAM role ARN is associated with the DB cluster and can be used to access other AWS services on your behalf.    PENDING - the IAM role ARN is being associated with the DB cluster.    INVALID - the IAM role ARN is associated with the DB cluster, but the DB cluster is unable to assume the IAM role in order to access other AWS services on your behalf.
        public let status: String?

        public init(featureName: String? = nil, roleArn: String? = nil, status: String? = nil) {
            self.featureName = featureName
            self.roleArn = roleArn
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case featureName = "FeatureName"
            case roleArn = "RoleArn"
            case status = "Status"
        }
    }

    public struct DBClusterSnapshot: AWSDecodableShape {
        public struct _AvailabilityZonesEncoding: ArrayCoderProperties { public static let member = "AvailabilityZone" }

        /// Specifies the allocated storage size in gibibytes (GiB).
        public let allocatedStorage: Int?
        /// Provides the list of EC2 Availability Zones that instances in the DB cluster snapshot can be restored in.
        @OptionalCustomCoding<ArrayCoder<_AvailabilityZonesEncoding, String>>
        public var availabilityZones: [String]?
        /// Specifies the time when the DB cluster was created, in Universal Coordinated Time (UTC).
        public let clusterCreateTime: Date?
        /// Specifies the DB cluster identifier of the DB cluster that this DB cluster snapshot was created from.
        public let dBClusterIdentifier: String?
        /// The Amazon Resource Name (ARN) for the DB cluster snapshot.
        public let dBClusterSnapshotArn: String?
        /// Specifies the identifier for a DB cluster snapshot. Must match the identifier of an existing snapshot. After you restore a DB cluster using a DBClusterSnapshotIdentifier, you must specify the same DBClusterSnapshotIdentifier for any future updates to the DB cluster. When you specify this property for an update, the DB cluster is not restored from the snapshot again, and the data in the database is not changed. However, if you don't specify the DBClusterSnapshotIdentifier, an empty DB cluster is created, and the original DB cluster is deleted. If you specify a property that is different from the previous snapshot restore property, the DB cluster is restored from the snapshot specified by the DBClusterSnapshotIdentifier, and the original DB cluster is deleted.
        public let dBClusterSnapshotIdentifier: String?
        /// Specifies the name of the database engine.
        public let engine: String?
        /// Provides the version of the database engine for this DB cluster snapshot.
        public let engineVersion: String?
        /// True if mapping of AWS Identity and Access Management (IAM) accounts to database accounts is enabled, and otherwise false.
        public let iAMDatabaseAuthenticationEnabled: Bool?
        /// If StorageEncrypted is true, the AWS KMS key identifier for the encrypted DB cluster snapshot.
        public let kmsKeyId: String?
        /// Provides the license model information for this DB cluster snapshot.
        public let licenseModel: String?
        /// Provides the master username for the DB cluster snapshot.
        public let masterUsername: String?
        /// Specifies the percentage of the estimated data that has been transferred.
        public let percentProgress: Int?
        /// Specifies the port that the DB cluster was listening on at the time of the snapshot.
        public let port: Int?
        /// Provides the time when the snapshot was taken, in Universal Coordinated Time (UTC).
        public let snapshotCreateTime: Date?
        /// Provides the type of the DB cluster snapshot.
        public let snapshotType: String?
        /// If the DB cluster snapshot was copied from a source DB cluster snapshot, the Amazon Resource Name (ARN) for the source DB cluster snapshot, otherwise, a null value.
        public let sourceDBClusterSnapshotArn: String?
        /// Specifies the status of this DB cluster snapshot.
        public let status: String?
        /// Specifies whether the DB cluster snapshot is encrypted.
        public let storageEncrypted: Bool?
        /// Provides the VPC ID associated with the DB cluster snapshot.
        public let vpcId: String?

        public init(allocatedStorage: Int? = nil, availabilityZones: [String]? = nil, clusterCreateTime: Date? = nil, dBClusterIdentifier: String? = nil, dBClusterSnapshotArn: String? = nil, dBClusterSnapshotIdentifier: String? = nil, engine: String? = nil, engineVersion: String? = nil, iAMDatabaseAuthenticationEnabled: Bool? = nil, kmsKeyId: String? = nil, licenseModel: String? = nil, masterUsername: String? = nil, percentProgress: Int? = nil, port: Int? = nil, snapshotCreateTime: Date? = nil, snapshotType: String? = nil, sourceDBClusterSnapshotArn: String? = nil, status: String? = nil, storageEncrypted: Bool? = nil, vpcId: String? = nil) {
            self.allocatedStorage = allocatedStorage
            self.availabilityZones = availabilityZones
            self.clusterCreateTime = clusterCreateTime
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBClusterSnapshotArn = dBClusterSnapshotArn
            self.dBClusterSnapshotIdentifier = dBClusterSnapshotIdentifier
            self.engine = engine
            self.engineVersion = engineVersion
            self.iAMDatabaseAuthenticationEnabled = iAMDatabaseAuthenticationEnabled
            self.kmsKeyId = kmsKeyId
            self.licenseModel = licenseModel
            self.masterUsername = masterUsername
            self.percentProgress = percentProgress
            self.port = port
            self.snapshotCreateTime = snapshotCreateTime
            self.snapshotType = snapshotType
            self.sourceDBClusterSnapshotArn = sourceDBClusterSnapshotArn
            self.status = status
            self.storageEncrypted = storageEncrypted
            self.vpcId = vpcId
        }

        private enum CodingKeys: String, CodingKey {
            case allocatedStorage = "AllocatedStorage"
            case availabilityZones = "AvailabilityZones"
            case clusterCreateTime = "ClusterCreateTime"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBClusterSnapshotArn = "DBClusterSnapshotArn"
            case dBClusterSnapshotIdentifier = "DBClusterSnapshotIdentifier"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case iAMDatabaseAuthenticationEnabled = "IAMDatabaseAuthenticationEnabled"
            case kmsKeyId = "KmsKeyId"
            case licenseModel = "LicenseModel"
            case masterUsername = "MasterUsername"
            case percentProgress = "PercentProgress"
            case port = "Port"
            case snapshotCreateTime = "SnapshotCreateTime"
            case snapshotType = "SnapshotType"
            case sourceDBClusterSnapshotArn = "SourceDBClusterSnapshotArn"
            case status = "Status"
            case storageEncrypted = "StorageEncrypted"
            case vpcId = "VpcId"
        }
    }

    public struct DBClusterSnapshotAttribute: AWSDecodableShape {
        public struct _AttributeValuesEncoding: ArrayCoderProperties { public static let member = "AttributeValue" }

        /// The name of the manual DB cluster snapshot attribute. The attribute named restore refers to the list of AWS accounts that have permission to copy or restore the manual DB cluster snapshot. For more information, see the ModifyDBClusterSnapshotAttribute API action.
        public let attributeName: String?
        /// The value(s) for the manual DB cluster snapshot attribute. If the AttributeName field is set to restore, then this element returns a list of IDs of the AWS accounts that are authorized to copy or restore the manual DB cluster snapshot. If a value of all is in the list, then the manual DB cluster snapshot is public and available for any AWS account to copy or restore.
        @OptionalCustomCoding<ArrayCoder<_AttributeValuesEncoding, String>>
        public var attributeValues: [String]?

        public init(attributeName: String? = nil, attributeValues: [String]? = nil) {
            self.attributeName = attributeName
            self.attributeValues = attributeValues
        }

        private enum CodingKeys: String, CodingKey {
            case attributeName = "AttributeName"
            case attributeValues = "AttributeValues"
        }
    }

    public struct DBClusterSnapshotAttributesResult: AWSDecodableShape {
        public struct _DBClusterSnapshotAttributesEncoding: ArrayCoderProperties { public static let member = "DBClusterSnapshotAttribute" }

        /// The list of attributes and values for the manual DB cluster snapshot.
        @OptionalCustomCoding<ArrayCoder<_DBClusterSnapshotAttributesEncoding, DBClusterSnapshotAttribute>>
        public var dBClusterSnapshotAttributes: [DBClusterSnapshotAttribute]?
        /// The identifier of the manual DB cluster snapshot that the attributes apply to.
        public let dBClusterSnapshotIdentifier: String?

        public init(dBClusterSnapshotAttributes: [DBClusterSnapshotAttribute]? = nil, dBClusterSnapshotIdentifier: String? = nil) {
            self.dBClusterSnapshotAttributes = dBClusterSnapshotAttributes
            self.dBClusterSnapshotIdentifier = dBClusterSnapshotIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterSnapshotAttributes = "DBClusterSnapshotAttributes"
            case dBClusterSnapshotIdentifier = "DBClusterSnapshotIdentifier"
        }
    }

    public struct DBClusterSnapshotMessage: AWSDecodableShape {
        public struct _DBClusterSnapshotsEncoding: ArrayCoderProperties { public static let member = "DBClusterSnapshot" }

        /// Provides a list of DB cluster snapshots for the user.
        @OptionalCustomCoding<ArrayCoder<_DBClusterSnapshotsEncoding, DBClusterSnapshot>>
        public var dBClusterSnapshots: [DBClusterSnapshot]?
        ///  An optional pagination token provided by a previous DescribeDBClusterSnapshots request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?

        public init(dBClusterSnapshots: [DBClusterSnapshot]? = nil, marker: String? = nil) {
            self.dBClusterSnapshots = dBClusterSnapshots
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterSnapshots = "DBClusterSnapshots"
            case marker = "Marker"
        }
    }

    public struct DBEngineVersion: AWSDecodableShape {
        public struct _SupportedCharacterSetsEncoding: ArrayCoderProperties { public static let member = "CharacterSet" }
        public struct _SupportedTimezonesEncoding: ArrayCoderProperties { public static let member = "Timezone" }
        public struct _ValidUpgradeTargetEncoding: ArrayCoderProperties { public static let member = "UpgradeTarget" }

        /// The description of the database engine.
        public let dBEngineDescription: String?
        /// The description of the database engine version.
        public let dBEngineVersionDescription: String?
        /// The name of the DB parameter group family for the database engine.
        public let dBParameterGroupFamily: String?
        ///  (Not supported by Neptune)
        public let defaultCharacterSet: CharacterSet?
        /// The name of the database engine.
        public let engine: String?
        /// The version number of the database engine.
        public let engineVersion: String?
        /// The types of logs that the database engine has available for export to CloudWatch Logs.
        @OptionalCustomCoding<StandardArrayCoder>
        public var exportableLogTypes: [String]?
        ///  (Not supported by Neptune)
        @OptionalCustomCoding<ArrayCoder<_SupportedCharacterSetsEncoding, CharacterSet>>
        public var supportedCharacterSets: [CharacterSet]?
        /// A list of the time zones supported by this engine for the Timezone parameter of the CreateDBInstance action.
        @OptionalCustomCoding<ArrayCoder<_SupportedTimezonesEncoding, Timezone>>
        public var supportedTimezones: [Timezone]?
        /// A value that indicates whether the engine version supports exporting the log types specified by ExportableLogTypes to CloudWatch Logs.
        public let supportsLogExportsToCloudwatchLogs: Bool?
        /// Indicates whether the database engine version supports read replicas.
        public let supportsReadReplica: Bool?
        /// A list of engine versions that this database engine version can be upgraded to.
        @OptionalCustomCoding<ArrayCoder<_ValidUpgradeTargetEncoding, UpgradeTarget>>
        public var validUpgradeTarget: [UpgradeTarget]?

        public init(dBEngineDescription: String? = nil, dBEngineVersionDescription: String? = nil, dBParameterGroupFamily: String? = nil, defaultCharacterSet: CharacterSet? = nil, engine: String? = nil, engineVersion: String? = nil, exportableLogTypes: [String]? = nil, supportedCharacterSets: [CharacterSet]? = nil, supportedTimezones: [Timezone]? = nil, supportsLogExportsToCloudwatchLogs: Bool? = nil, supportsReadReplica: Bool? = nil, validUpgradeTarget: [UpgradeTarget]? = nil) {
            self.dBEngineDescription = dBEngineDescription
            self.dBEngineVersionDescription = dBEngineVersionDescription
            self.dBParameterGroupFamily = dBParameterGroupFamily
            self.defaultCharacterSet = defaultCharacterSet
            self.engine = engine
            self.engineVersion = engineVersion
            self.exportableLogTypes = exportableLogTypes
            self.supportedCharacterSets = supportedCharacterSets
            self.supportedTimezones = supportedTimezones
            self.supportsLogExportsToCloudwatchLogs = supportsLogExportsToCloudwatchLogs
            self.supportsReadReplica = supportsReadReplica
            self.validUpgradeTarget = validUpgradeTarget
        }

        private enum CodingKeys: String, CodingKey {
            case dBEngineDescription = "DBEngineDescription"
            case dBEngineVersionDescription = "DBEngineVersionDescription"
            case dBParameterGroupFamily = "DBParameterGroupFamily"
            case defaultCharacterSet = "DefaultCharacterSet"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case exportableLogTypes = "ExportableLogTypes"
            case supportedCharacterSets = "SupportedCharacterSets"
            case supportedTimezones = "SupportedTimezones"
            case supportsLogExportsToCloudwatchLogs = "SupportsLogExportsToCloudwatchLogs"
            case supportsReadReplica = "SupportsReadReplica"
            case validUpgradeTarget = "ValidUpgradeTarget"
        }
    }

    public struct DBEngineVersionMessage: AWSDecodableShape {
        public struct _DBEngineVersionsEncoding: ArrayCoderProperties { public static let member = "DBEngineVersion" }

        ///  A list of DBEngineVersion elements.
        @OptionalCustomCoding<ArrayCoder<_DBEngineVersionsEncoding, DBEngineVersion>>
        public var dBEngineVersions: [DBEngineVersion]?
        ///  An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?

        public init(dBEngineVersions: [DBEngineVersion]? = nil, marker: String? = nil) {
            self.dBEngineVersions = dBEngineVersions
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case dBEngineVersions = "DBEngineVersions"
            case marker = "Marker"
        }
    }

    public struct DBInstance: AWSDecodableShape {
        public struct _DBParameterGroupsEncoding: ArrayCoderProperties { public static let member = "DBParameterGroup" }
        public struct _DBSecurityGroupsEncoding: ArrayCoderProperties { public static let member = "DBSecurityGroup" }
        public struct _DomainMembershipsEncoding: ArrayCoderProperties { public static let member = "DomainMembership" }
        public struct _OptionGroupMembershipsEncoding: ArrayCoderProperties { public static let member = "OptionGroupMembership" }
        public struct _ReadReplicaDBClusterIdentifiersEncoding: ArrayCoderProperties { public static let member = "ReadReplicaDBClusterIdentifier" }
        public struct _ReadReplicaDBInstanceIdentifiersEncoding: ArrayCoderProperties { public static let member = "ReadReplicaDBInstanceIdentifier" }
        public struct _StatusInfosEncoding: ArrayCoderProperties { public static let member = "DBInstanceStatusInfo" }
        public struct _VpcSecurityGroupsEncoding: ArrayCoderProperties { public static let member = "VpcSecurityGroupMembership" }

        /// Specifies the allocated storage size specified in gibibytes.
        public let allocatedStorage: Int?
        /// Indicates that minor version patches are applied automatically.
        public let autoMinorVersionUpgrade: Bool?
        /// Specifies the name of the Availability Zone the DB instance is located in.
        public let availabilityZone: String?
        /// Specifies the number of days for which automatic DB snapshots are retained.
        public let backupRetentionPeriod: Int?
        /// The identifier of the CA certificate for this DB instance.
        public let cACertificateIdentifier: String?
        ///  (Not supported by Neptune)
        public let characterSetName: String?
        /// Specifies whether tags are copied from the DB instance to snapshots of the DB instance.
        public let copyTagsToSnapshot: Bool?
        /// If the DB instance is a member of a DB cluster, contains the name of the DB cluster that the DB instance is a member of.
        public let dBClusterIdentifier: String?
        /// The Amazon Resource Name (ARN) for the DB instance.
        public let dBInstanceArn: String?
        /// Contains the name of the compute and memory capacity class of the DB instance.
        public let dBInstanceClass: String?
        /// Contains a user-supplied database identifier. This identifier is the unique key that identifies a DB instance.
        public let dBInstanceIdentifier: String?
        /// Specifies the port that the DB instance listens on. If the DB instance is part of a DB cluster, this can be a different port than the DB cluster port.
        public let dbInstancePort: Int?
        /// Specifies the current state of this database.
        public let dBInstanceStatus: String?
        /// The AWS Region-unique, immutable identifier for the DB instance. This identifier is found in AWS CloudTrail log entries whenever the AWS KMS key for the DB instance is accessed.
        public let dbiResourceId: String?
        /// The database name.
        public let dBName: String?
        /// Provides the list of DB parameter groups applied to this DB instance.
        @OptionalCustomCoding<ArrayCoder<_DBParameterGroupsEncoding, DBParameterGroupStatus>>
        public var dBParameterGroups: [DBParameterGroupStatus]?
        ///  Provides List of DB security group elements containing only DBSecurityGroup.Name and DBSecurityGroup.Status subelements.
        @OptionalCustomCoding<ArrayCoder<_DBSecurityGroupsEncoding, DBSecurityGroupMembership>>
        public var dBSecurityGroups: [DBSecurityGroupMembership]?
        /// Specifies information on the subnet group associated with the DB instance, including the name, description, and subnets in the subnet group.
        public let dBSubnetGroup: DBSubnetGroup?
        /// Indicates whether or not the DB instance has deletion protection enabled. The instance can't be deleted when deletion protection is enabled. See Deleting a DB Instance.
        public let deletionProtection: Bool?
        /// Not supported
        @OptionalCustomCoding<ArrayCoder<_DomainMembershipsEncoding, DomainMembership>>
        public var domainMemberships: [DomainMembership]?
        /// A list of log types that this DB instance is configured to export to CloudWatch Logs.
        @OptionalCustomCoding<StandardArrayCoder>
        public var enabledCloudwatchLogsExports: [String]?
        /// Specifies the connection endpoint.
        public let endpoint: Endpoint?
        /// Provides the name of the database engine to be used for this DB instance.
        public let engine: String?
        /// Indicates the database engine version.
        public let engineVersion: String?
        /// The Amazon Resource Name (ARN) of the Amazon CloudWatch Logs log stream that receives the Enhanced Monitoring metrics data for the DB instance.
        public let enhancedMonitoringResourceArn: String?
        /// True if AWS Identity and Access Management (IAM) authentication is enabled, and otherwise false.
        public let iAMDatabaseAuthenticationEnabled: Bool?
        /// Provides the date and time the DB instance was created.
        public let instanceCreateTime: Date?
        /// Specifies the Provisioned IOPS (I/O operations per second) value.
        public let iops: Int?
        ///  Not supported: The encryption for DB instances is managed by the DB cluster.
        public let kmsKeyId: String?
        /// Specifies the latest time to which a database can be restored with point-in-time restore.
        public let latestRestorableTime: Date?
        /// License model information for this DB instance.
        public let licenseModel: String?
        /// Contains the master username for the DB instance.
        public let masterUsername: String?
        /// The interval, in seconds, between points when Enhanced Monitoring metrics are collected for the DB instance.
        public let monitoringInterval: Int?
        /// The ARN for the IAM role that permits Neptune to send Enhanced Monitoring metrics to Amazon CloudWatch Logs.
        public let monitoringRoleArn: String?
        /// Specifies if the DB instance is a Multi-AZ deployment.
        public let multiAZ: Bool?
        ///  (Not supported by Neptune)
        @OptionalCustomCoding<ArrayCoder<_OptionGroupMembershipsEncoding, OptionGroupMembership>>
        public var optionGroupMemberships: [OptionGroupMembership]?
        /// Specifies that changes to the DB instance are pending. This element is only included when changes are pending. Specific changes are identified by subelements.
        public let pendingModifiedValues: PendingModifiedValues?
        ///  (Not supported by Neptune)
        public let performanceInsightsEnabled: Bool?
        ///  (Not supported by Neptune)
        public let performanceInsightsKMSKeyId: String?
        ///  Specifies the daily time range during which automated backups are created if automated backups are enabled, as determined by the BackupRetentionPeriod.
        public let preferredBackupWindow: String?
        /// Specifies the weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC).
        public let preferredMaintenanceWindow: String?
        /// A value that specifies the order in which a Read Replica is promoted to the primary instance after a failure of the existing primary instance.
        public let promotionTier: Int?
        /// Contains one or more identifiers of DB clusters that are Read Replicas of this DB instance.
        @OptionalCustomCoding<ArrayCoder<_ReadReplicaDBClusterIdentifiersEncoding, String>>
        public var readReplicaDBClusterIdentifiers: [String]?
        /// Contains one or more identifiers of the Read Replicas associated with this DB instance.
        @OptionalCustomCoding<ArrayCoder<_ReadReplicaDBInstanceIdentifiersEncoding, String>>
        public var readReplicaDBInstanceIdentifiers: [String]?
        /// Contains the identifier of the source DB instance if this DB instance is a Read Replica.
        public let readReplicaSourceDBInstanceIdentifier: String?
        /// If present, specifies the name of the secondary Availability Zone for a DB instance with multi-AZ support.
        public let secondaryAvailabilityZone: String?
        /// The status of a Read Replica. If the instance is not a Read Replica, this is blank.
        @OptionalCustomCoding<ArrayCoder<_StatusInfosEncoding, DBInstanceStatusInfo>>
        public var statusInfos: [DBInstanceStatusInfo]?
        /// Not supported: The encryption for DB instances is managed by the DB cluster.
        public let storageEncrypted: Bool?
        /// Specifies the storage type associated with DB instance.
        public let storageType: String?
        /// The ARN from the key store with which the instance is associated for TDE encryption.
        public let tdeCredentialArn: String?
        /// Not supported.
        public let timezone: String?
        /// Provides a list of VPC security group elements that the DB instance belongs to.
        @OptionalCustomCoding<ArrayCoder<_VpcSecurityGroupsEncoding, VpcSecurityGroupMembership>>
        public var vpcSecurityGroups: [VpcSecurityGroupMembership]?

        public init(allocatedStorage: Int? = nil, autoMinorVersionUpgrade: Bool? = nil, availabilityZone: String? = nil, backupRetentionPeriod: Int? = nil, cACertificateIdentifier: String? = nil, characterSetName: String? = nil, copyTagsToSnapshot: Bool? = nil, dBClusterIdentifier: String? = nil, dBInstanceArn: String? = nil, dBInstanceClass: String? = nil, dBInstanceIdentifier: String? = nil, dbInstancePort: Int? = nil, dBInstanceStatus: String? = nil, dbiResourceId: String? = nil, dBName: String? = nil, dBParameterGroups: [DBParameterGroupStatus]? = nil, dBSecurityGroups: [DBSecurityGroupMembership]? = nil, dBSubnetGroup: DBSubnetGroup? = nil, deletionProtection: Bool? = nil, domainMemberships: [DomainMembership]? = nil, enabledCloudwatchLogsExports: [String]? = nil, endpoint: Endpoint? = nil, engine: String? = nil, engineVersion: String? = nil, enhancedMonitoringResourceArn: String? = nil, iAMDatabaseAuthenticationEnabled: Bool? = nil, instanceCreateTime: Date? = nil, iops: Int? = nil, kmsKeyId: String? = nil, latestRestorableTime: Date? = nil, licenseModel: String? = nil, masterUsername: String? = nil, monitoringInterval: Int? = nil, monitoringRoleArn: String? = nil, multiAZ: Bool? = nil, optionGroupMemberships: [OptionGroupMembership]? = nil, pendingModifiedValues: PendingModifiedValues? = nil, performanceInsightsEnabled: Bool? = nil, performanceInsightsKMSKeyId: String? = nil, preferredBackupWindow: String? = nil, preferredMaintenanceWindow: String? = nil, promotionTier: Int? = nil, readReplicaDBClusterIdentifiers: [String]? = nil, readReplicaDBInstanceIdentifiers: [String]? = nil, readReplicaSourceDBInstanceIdentifier: String? = nil, secondaryAvailabilityZone: String? = nil, statusInfos: [DBInstanceStatusInfo]? = nil, storageEncrypted: Bool? = nil, storageType: String? = nil, tdeCredentialArn: String? = nil, timezone: String? = nil, vpcSecurityGroups: [VpcSecurityGroupMembership]? = nil) {
            self.allocatedStorage = allocatedStorage
            self.autoMinorVersionUpgrade = autoMinorVersionUpgrade
            self.availabilityZone = availabilityZone
            self.backupRetentionPeriod = backupRetentionPeriod
            self.cACertificateIdentifier = cACertificateIdentifier
            self.characterSetName = characterSetName
            self.copyTagsToSnapshot = copyTagsToSnapshot
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBInstanceArn = dBInstanceArn
            self.dBInstanceClass = dBInstanceClass
            self.dBInstanceIdentifier = dBInstanceIdentifier
            self.dbInstancePort = dbInstancePort
            self.dBInstanceStatus = dBInstanceStatus
            self.dbiResourceId = dbiResourceId
            self.dBName = dBName
            self.dBParameterGroups = dBParameterGroups
            self.dBSecurityGroups = dBSecurityGroups
            self.dBSubnetGroup = dBSubnetGroup
            self.deletionProtection = deletionProtection
            self.domainMemberships = domainMemberships
            self.enabledCloudwatchLogsExports = enabledCloudwatchLogsExports
            self.endpoint = endpoint
            self.engine = engine
            self.engineVersion = engineVersion
            self.enhancedMonitoringResourceArn = enhancedMonitoringResourceArn
            self.iAMDatabaseAuthenticationEnabled = iAMDatabaseAuthenticationEnabled
            self.instanceCreateTime = instanceCreateTime
            self.iops = iops
            self.kmsKeyId = kmsKeyId
            self.latestRestorableTime = latestRestorableTime
            self.licenseModel = licenseModel
            self.masterUsername = masterUsername
            self.monitoringInterval = monitoringInterval
            self.monitoringRoleArn = monitoringRoleArn
            self.multiAZ = multiAZ
            self.optionGroupMemberships = optionGroupMemberships
            self.pendingModifiedValues = pendingModifiedValues
            self.performanceInsightsEnabled = performanceInsightsEnabled
            self.performanceInsightsKMSKeyId = performanceInsightsKMSKeyId
            self.preferredBackupWindow = preferredBackupWindow
            self.preferredMaintenanceWindow = preferredMaintenanceWindow
            self.promotionTier = promotionTier
            self.readReplicaDBClusterIdentifiers = readReplicaDBClusterIdentifiers
            self.readReplicaDBInstanceIdentifiers = readReplicaDBInstanceIdentifiers
            self.readReplicaSourceDBInstanceIdentifier = readReplicaSourceDBInstanceIdentifier
            self.secondaryAvailabilityZone = secondaryAvailabilityZone
            self.statusInfos = statusInfos
            self.storageEncrypted = storageEncrypted
            self.storageType = storageType
            self.tdeCredentialArn = tdeCredentialArn
            self.timezone = timezone
            self.vpcSecurityGroups = vpcSecurityGroups
        }

        private enum CodingKeys: String, CodingKey {
            case allocatedStorage = "AllocatedStorage"
            case autoMinorVersionUpgrade = "AutoMinorVersionUpgrade"
            case availabilityZone = "AvailabilityZone"
            case backupRetentionPeriod = "BackupRetentionPeriod"
            case cACertificateIdentifier = "CACertificateIdentifier"
            case characterSetName = "CharacterSetName"
            case copyTagsToSnapshot = "CopyTagsToSnapshot"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBInstanceArn = "DBInstanceArn"
            case dBInstanceClass = "DBInstanceClass"
            case dBInstanceIdentifier = "DBInstanceIdentifier"
            case dbInstancePort = "DbInstancePort"
            case dBInstanceStatus = "DBInstanceStatus"
            case dbiResourceId = "DbiResourceId"
            case dBName = "DBName"
            case dBParameterGroups = "DBParameterGroups"
            case dBSecurityGroups = "DBSecurityGroups"
            case dBSubnetGroup = "DBSubnetGroup"
            case deletionProtection = "DeletionProtection"
            case domainMemberships = "DomainMemberships"
            case enabledCloudwatchLogsExports = "EnabledCloudwatchLogsExports"
            case endpoint = "Endpoint"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case enhancedMonitoringResourceArn = "EnhancedMonitoringResourceArn"
            case iAMDatabaseAuthenticationEnabled = "IAMDatabaseAuthenticationEnabled"
            case instanceCreateTime = "InstanceCreateTime"
            case iops = "Iops"
            case kmsKeyId = "KmsKeyId"
            case latestRestorableTime = "LatestRestorableTime"
            case licenseModel = "LicenseModel"
            case masterUsername = "MasterUsername"
            case monitoringInterval = "MonitoringInterval"
            case monitoringRoleArn = "MonitoringRoleArn"
            case multiAZ = "MultiAZ"
            case optionGroupMemberships = "OptionGroupMemberships"
            case pendingModifiedValues = "PendingModifiedValues"
            case performanceInsightsEnabled = "PerformanceInsightsEnabled"
            case performanceInsightsKMSKeyId = "PerformanceInsightsKMSKeyId"
            case preferredBackupWindow = "PreferredBackupWindow"
            case preferredMaintenanceWindow = "PreferredMaintenanceWindow"
            case promotionTier = "PromotionTier"
            case readReplicaDBClusterIdentifiers = "ReadReplicaDBClusterIdentifiers"
            case readReplicaDBInstanceIdentifiers = "ReadReplicaDBInstanceIdentifiers"
            case readReplicaSourceDBInstanceIdentifier = "ReadReplicaSourceDBInstanceIdentifier"
            case secondaryAvailabilityZone = "SecondaryAvailabilityZone"
            case statusInfos = "StatusInfos"
            case storageEncrypted = "StorageEncrypted"
            case storageType = "StorageType"
            case tdeCredentialArn = "TdeCredentialArn"
            case timezone = "Timezone"
            case vpcSecurityGroups = "VpcSecurityGroups"
        }
    }

    public struct DBInstanceMessage: AWSDecodableShape {
        public struct _DBInstancesEncoding: ArrayCoderProperties { public static let member = "DBInstance" }

        ///  A list of DBInstance instances.
        @OptionalCustomCoding<ArrayCoder<_DBInstancesEncoding, DBInstance>>
        public var dBInstances: [DBInstance]?
        ///  An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords .
        public let marker: String?

        public init(dBInstances: [DBInstance]? = nil, marker: String? = nil) {
            self.dBInstances = dBInstances
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstances = "DBInstances"
            case marker = "Marker"
        }
    }

    public struct DBInstanceStatusInfo: AWSDecodableShape {
        /// Details of the error if there is an error for the instance. If the instance is not in an error state, this value is blank.
        public let message: String?
        /// Boolean value that is true if the instance is operating normally, or false if the instance is in an error state.
        public let normal: Bool?
        /// Status of the DB instance. For a StatusType of read replica, the values can be replicating, error, stopped, or terminated.
        public let status: String?
        /// This value is currently "read replication."
        public let statusType: String?

        public init(message: String? = nil, normal: Bool? = nil, status: String? = nil, statusType: String? = nil) {
            self.message = message
            self.normal = normal
            self.status = status
            self.statusType = statusType
        }

        private enum CodingKeys: String, CodingKey {
            case message = "Message"
            case normal = "Normal"
            case status = "Status"
            case statusType = "StatusType"
        }
    }

    public struct DBParameterGroup: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) for the DB parameter group.
        public let dBParameterGroupArn: String?
        /// Provides the name of the DB parameter group family that this DB parameter group is compatible with.
        public let dBParameterGroupFamily: String?
        /// Provides the name of the DB parameter group.
        public let dBParameterGroupName: String?
        /// Provides the customer-specified description for this DB parameter group.
        public let description: String?

        public init(dBParameterGroupArn: String? = nil, dBParameterGroupFamily: String? = nil, dBParameterGroupName: String? = nil, description: String? = nil) {
            self.dBParameterGroupArn = dBParameterGroupArn
            self.dBParameterGroupFamily = dBParameterGroupFamily
            self.dBParameterGroupName = dBParameterGroupName
            self.description = description
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupArn = "DBParameterGroupArn"
            case dBParameterGroupFamily = "DBParameterGroupFamily"
            case dBParameterGroupName = "DBParameterGroupName"
            case description = "Description"
        }
    }

    public struct DBParameterGroupDetails: AWSDecodableShape {
        public struct _ParametersEncoding: ArrayCoderProperties { public static let member = "Parameter" }

        /// An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        /// A list of Parameter values.
        @OptionalCustomCoding<ArrayCoder<_ParametersEncoding, Parameter>>
        public var parameters: [Parameter]?

        public init(marker: String? = nil, parameters: [Parameter]? = nil) {
            self.marker = marker
            self.parameters = parameters
        }

        private enum CodingKeys: String, CodingKey {
            case marker = "Marker"
            case parameters = "Parameters"
        }
    }

    public struct DBParameterGroupNameMessage: AWSDecodableShape {
        /// Provides the name of the DB parameter group.
        public let dBParameterGroupName: String?

        public init(dBParameterGroupName: String? = nil) {
            self.dBParameterGroupName = dBParameterGroupName
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupName = "DBParameterGroupName"
        }
    }

    public struct DBParameterGroupStatus: AWSDecodableShape {
        /// The name of the DP parameter group.
        public let dBParameterGroupName: String?
        /// The status of parameter updates.
        public let parameterApplyStatus: String?

        public init(dBParameterGroupName: String? = nil, parameterApplyStatus: String? = nil) {
            self.dBParameterGroupName = dBParameterGroupName
            self.parameterApplyStatus = parameterApplyStatus
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupName = "DBParameterGroupName"
            case parameterApplyStatus = "ParameterApplyStatus"
        }
    }

    public struct DBParameterGroupsMessage: AWSDecodableShape {
        public struct _DBParameterGroupsEncoding: ArrayCoderProperties { public static let member = "DBParameterGroup" }

        /// A list of DBParameterGroup instances.
        @OptionalCustomCoding<ArrayCoder<_DBParameterGroupsEncoding, DBParameterGroup>>
        public var dBParameterGroups: [DBParameterGroup]?
        /// An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?

        public init(dBParameterGroups: [DBParameterGroup]? = nil, marker: String? = nil) {
            self.dBParameterGroups = dBParameterGroups
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroups = "DBParameterGroups"
            case marker = "Marker"
        }
    }

    public struct DBSecurityGroupMembership: AWSDecodableShape {
        /// The name of the DB security group.
        public let dBSecurityGroupName: String?
        /// The status of the DB security group.
        public let status: String?

        public init(dBSecurityGroupName: String? = nil, status: String? = nil) {
            self.dBSecurityGroupName = dBSecurityGroupName
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case dBSecurityGroupName = "DBSecurityGroupName"
            case status = "Status"
        }
    }

    public struct DBSubnetGroup: AWSDecodableShape {
        public struct _SubnetsEncoding: ArrayCoderProperties { public static let member = "Subnet" }

        /// The Amazon Resource Name (ARN) for the DB subnet group.
        public let dBSubnetGroupArn: String?
        /// Provides the description of the DB subnet group.
        public let dBSubnetGroupDescription: String?
        /// The name of the DB subnet group.
        public let dBSubnetGroupName: String?
        /// Provides the status of the DB subnet group.
        public let subnetGroupStatus: String?
        ///  Contains a list of Subnet elements.
        @OptionalCustomCoding<ArrayCoder<_SubnetsEncoding, Subnet>>
        public var subnets: [Subnet]?
        /// Provides the VpcId of the DB subnet group.
        public let vpcId: String?

        public init(dBSubnetGroupArn: String? = nil, dBSubnetGroupDescription: String? = nil, dBSubnetGroupName: String? = nil, subnetGroupStatus: String? = nil, subnets: [Subnet]? = nil, vpcId: String? = nil) {
            self.dBSubnetGroupArn = dBSubnetGroupArn
            self.dBSubnetGroupDescription = dBSubnetGroupDescription
            self.dBSubnetGroupName = dBSubnetGroupName
            self.subnetGroupStatus = subnetGroupStatus
            self.subnets = subnets
            self.vpcId = vpcId
        }

        private enum CodingKeys: String, CodingKey {
            case dBSubnetGroupArn = "DBSubnetGroupArn"
            case dBSubnetGroupDescription = "DBSubnetGroupDescription"
            case dBSubnetGroupName = "DBSubnetGroupName"
            case subnetGroupStatus = "SubnetGroupStatus"
            case subnets = "Subnets"
            case vpcId = "VpcId"
        }
    }

    public struct DBSubnetGroupMessage: AWSDecodableShape {
        public struct _DBSubnetGroupsEncoding: ArrayCoderProperties { public static let member = "DBSubnetGroup" }

        ///  A list of DBSubnetGroup instances.
        @OptionalCustomCoding<ArrayCoder<_DBSubnetGroupsEncoding, DBSubnetGroup>>
        public var dBSubnetGroups: [DBSubnetGroup]?
        ///  An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?

        public init(dBSubnetGroups: [DBSubnetGroup]? = nil, marker: String? = nil) {
            self.dBSubnetGroups = dBSubnetGroups
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case dBSubnetGroups = "DBSubnetGroups"
            case marker = "Marker"
        }
    }

    public struct DeleteDBClusterEndpointMessage: AWSEncodableShape {
        /// The identifier associated with the custom endpoint. This parameter is stored as a lowercase string.
        public let dBClusterEndpointIdentifier: String

        public init(dBClusterEndpointIdentifier: String) {
            self.dBClusterEndpointIdentifier = dBClusterEndpointIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterEndpointIdentifier = "DBClusterEndpointIdentifier"
        }
    }

    public struct DeleteDBClusterEndpointOutput: AWSDecodableShape {
        /// The type associated with a custom endpoint. One of: READER, WRITER, ANY.
        public let customEndpointType: String?
        /// The Amazon Resource Name (ARN) for the endpoint.
        public let dBClusterEndpointArn: String?
        /// The identifier associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterEndpointIdentifier: String?
        /// A unique system-generated identifier for an endpoint. It remains the same for the whole life of the endpoint.
        public let dBClusterEndpointResourceIdentifier: String?
        /// The DB cluster identifier of the DB cluster associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterIdentifier: String?
        /// The DNS address of the endpoint.
        public let endpoint: String?
        /// The type of the endpoint. One of: READER, WRITER, CUSTOM.
        public let endpointType: String?
        /// List of DB instance identifiers that aren't part of the custom endpoint group. All other eligible instances are reachable through the custom endpoint. Only relevant if the list of static members is empty.
        @OptionalCustomCoding<StandardArrayCoder>
        public var excludedMembers: [String]?
        /// List of DB instance identifiers that are part of the custom endpoint group.
        @OptionalCustomCoding<StandardArrayCoder>
        public var staticMembers: [String]?
        /// The current status of the endpoint. One of: creating, available, deleting, inactive, modifying. The inactive state applies to an endpoint that cannot be used for a certain kind of cluster, such as a writer endpoint for a read-only secondary cluster in a global database.
        public let status: String?

        public init(customEndpointType: String? = nil, dBClusterEndpointArn: String? = nil, dBClusterEndpointIdentifier: String? = nil, dBClusterEndpointResourceIdentifier: String? = nil, dBClusterIdentifier: String? = nil, endpoint: String? = nil, endpointType: String? = nil, excludedMembers: [String]? = nil, staticMembers: [String]? = nil, status: String? = nil) {
            self.customEndpointType = customEndpointType
            self.dBClusterEndpointArn = dBClusterEndpointArn
            self.dBClusterEndpointIdentifier = dBClusterEndpointIdentifier
            self.dBClusterEndpointResourceIdentifier = dBClusterEndpointResourceIdentifier
            self.dBClusterIdentifier = dBClusterIdentifier
            self.endpoint = endpoint
            self.endpointType = endpointType
            self.excludedMembers = excludedMembers
            self.staticMembers = staticMembers
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case customEndpointType = "CustomEndpointType"
            case dBClusterEndpointArn = "DBClusterEndpointArn"
            case dBClusterEndpointIdentifier = "DBClusterEndpointIdentifier"
            case dBClusterEndpointResourceIdentifier = "DBClusterEndpointResourceIdentifier"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case endpoint = "Endpoint"
            case endpointType = "EndpointType"
            case excludedMembers = "ExcludedMembers"
            case staticMembers = "StaticMembers"
            case status = "Status"
        }
    }

    public struct DeleteDBClusterMessage: AWSEncodableShape {
        /// The DB cluster identifier for the DB cluster to be deleted. This parameter isn't case-sensitive. Constraints:   Must match an existing DBClusterIdentifier.
        public let dBClusterIdentifier: String
        ///  The DB cluster snapshot identifier of the new DB cluster snapshot created when SkipFinalSnapshot is set to false.   Specifying this parameter and also setting the SkipFinalShapshot parameter to true results in an error.  Constraints:   Must be 1 to 255 letters, numbers, or hyphens.   First character must be a letter   Cannot end with a hyphen or contain two consecutive hyphens
        public let finalDBSnapshotIdentifier: String?
        ///  Determines whether a final DB cluster snapshot is created before the DB cluster is deleted. If true is specified, no DB cluster snapshot is created. If false is specified, a DB cluster snapshot is created before the DB cluster is deleted.  You must specify a FinalDBSnapshotIdentifier parameter if SkipFinalSnapshot is false.  Default: false
        public let skipFinalSnapshot: Bool?

        public init(dBClusterIdentifier: String, finalDBSnapshotIdentifier: String? = nil, skipFinalSnapshot: Bool? = nil) {
            self.dBClusterIdentifier = dBClusterIdentifier
            self.finalDBSnapshotIdentifier = finalDBSnapshotIdentifier
            self.skipFinalSnapshot = skipFinalSnapshot
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
            case finalDBSnapshotIdentifier = "FinalDBSnapshotIdentifier"
            case skipFinalSnapshot = "SkipFinalSnapshot"
        }
    }

    public struct DeleteDBClusterParameterGroupMessage: AWSEncodableShape {
        /// The name of the DB cluster parameter group. Constraints:   Must be the name of an existing DB cluster parameter group.   You can't delete a default DB cluster parameter group.   Cannot be associated with any DB clusters.
        public let dBClusterParameterGroupName: String

        public init(dBClusterParameterGroupName: String) {
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
        }
    }

    public struct DeleteDBClusterResult: AWSDecodableShape {
        public let dBCluster: DBCluster?

        public init(dBCluster: DBCluster? = nil) {
            self.dBCluster = dBCluster
        }

        private enum CodingKeys: String, CodingKey {
            case dBCluster = "DBCluster"
        }
    }

    public struct DeleteDBClusterSnapshotMessage: AWSEncodableShape {
        /// The identifier of the DB cluster snapshot to delete. Constraints: Must be the name of an existing DB cluster snapshot in the available state.
        public let dBClusterSnapshotIdentifier: String

        public init(dBClusterSnapshotIdentifier: String) {
            self.dBClusterSnapshotIdentifier = dBClusterSnapshotIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterSnapshotIdentifier = "DBClusterSnapshotIdentifier"
        }
    }

    public struct DeleteDBClusterSnapshotResult: AWSDecodableShape {
        public let dBClusterSnapshot: DBClusterSnapshot?

        public init(dBClusterSnapshot: DBClusterSnapshot? = nil) {
            self.dBClusterSnapshot = dBClusterSnapshot
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterSnapshot = "DBClusterSnapshot"
        }
    }

    public struct DeleteDBInstanceMessage: AWSEncodableShape {
        /// The DB instance identifier for the DB instance to be deleted. This parameter isn't case-sensitive. Constraints:   Must match the name of an existing DB instance.
        public let dBInstanceIdentifier: String
        ///  The DBSnapshotIdentifier of the new DBSnapshot created when SkipFinalSnapshot is set to false.  Specifying this parameter and also setting the SkipFinalShapshot parameter to true results in an error.  Constraints:   Must be 1 to 255 letters or numbers.   First character must be a letter   Cannot end with a hyphen or contain two consecutive hyphens   Cannot be specified when deleting a Read Replica.
        public let finalDBSnapshotIdentifier: String?
        ///  Determines whether a final DB snapshot is created before the DB instance is deleted. If true is specified, no DBSnapshot is created. If false is specified, a DB snapshot is created before the DB instance is deleted. Note that when a DB instance is in a failure state and has a status of 'failed', 'incompatible-restore', or 'incompatible-network', it can only be deleted when the SkipFinalSnapshot parameter is set to "true". Specify true when deleting a Read Replica.  The FinalDBSnapshotIdentifier parameter must be specified if SkipFinalSnapshot is false.  Default: false
        public let skipFinalSnapshot: Bool?

        public init(dBInstanceIdentifier: String, finalDBSnapshotIdentifier: String? = nil, skipFinalSnapshot: Bool? = nil) {
            self.dBInstanceIdentifier = dBInstanceIdentifier
            self.finalDBSnapshotIdentifier = finalDBSnapshotIdentifier
            self.skipFinalSnapshot = skipFinalSnapshot
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstanceIdentifier = "DBInstanceIdentifier"
            case finalDBSnapshotIdentifier = "FinalDBSnapshotIdentifier"
            case skipFinalSnapshot = "SkipFinalSnapshot"
        }
    }

    public struct DeleteDBInstanceResult: AWSDecodableShape {
        public let dBInstance: DBInstance?

        public init(dBInstance: DBInstance? = nil) {
            self.dBInstance = dBInstance
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstance = "DBInstance"
        }
    }

    public struct DeleteDBParameterGroupMessage: AWSEncodableShape {
        /// The name of the DB parameter group. Constraints:   Must be the name of an existing DB parameter group   You can't delete a default DB parameter group   Cannot be associated with any DB instances
        public let dBParameterGroupName: String

        public init(dBParameterGroupName: String) {
            self.dBParameterGroupName = dBParameterGroupName
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupName = "DBParameterGroupName"
        }
    }

    public struct DeleteDBSubnetGroupMessage: AWSEncodableShape {
        /// The name of the database subnet group to delete.  You can't delete the default subnet group.  Constraints: Constraints: Must match the name of an existing DBSubnetGroup. Must not be default. Example: mySubnetgroup
        public let dBSubnetGroupName: String

        public init(dBSubnetGroupName: String) {
            self.dBSubnetGroupName = dBSubnetGroupName
        }

        private enum CodingKeys: String, CodingKey {
            case dBSubnetGroupName = "DBSubnetGroupName"
        }
    }

    public struct DeleteEventSubscriptionMessage: AWSEncodableShape {
        /// The name of the event notification subscription you want to delete.
        public let subscriptionName: String

        public init(subscriptionName: String) {
            self.subscriptionName = subscriptionName
        }

        private enum CodingKeys: String, CodingKey {
            case subscriptionName = "SubscriptionName"
        }
    }

    public struct DeleteEventSubscriptionResult: AWSDecodableShape {
        public let eventSubscription: EventSubscription?

        public init(eventSubscription: EventSubscription? = nil) {
            self.eventSubscription = eventSubscription
        }

        private enum CodingKeys: String, CodingKey {
            case eventSubscription = "EventSubscription"
        }
    }

    public struct DescribeDBClusterEndpointsMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The identifier of the endpoint to describe. This parameter is stored as a lowercase string.
        public let dBClusterEndpointIdentifier: String?
        /// The DB cluster identifier of the DB cluster associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterIdentifier: String?
        /// A set of name-value pairs that define which endpoints to include in the output. The filters are specified as name-value pairs, in the format Name=endpoint_type,Values=endpoint_type1,endpoint_type2,.... Name can be one of: db-cluster-endpoint-type, db-cluster-endpoint-custom-type, db-cluster-endpoint-id, db-cluster-endpoint-status. Values for the  db-cluster-endpoint-type filter can be one or more of: reader, writer, custom. Values for the db-cluster-endpoint-custom-type filter can be one or more of: reader, any. Values for the db-cluster-endpoint-status filter can be one or more of: available, creating, deleting, inactive, modifying.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribeDBClusterEndpoints request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so you can retrieve the remaining results.  Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?

        public init(dBClusterEndpointIdentifier: String? = nil, dBClusterIdentifier: String? = nil, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil) {
            self.dBClusterEndpointIdentifier = dBClusterEndpointIdentifier
            self.dBClusterIdentifier = dBClusterIdentifier
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterEndpointIdentifier = "DBClusterEndpointIdentifier"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
        }
    }

    public struct DescribeDBClusterParameterGroupsMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The name of a specific DB cluster parameter group to return details for. Constraints:   If supplied, must match the name of an existing DBClusterParameterGroup.
        public let dBClusterParameterGroupName: String?
        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribeDBClusterParameterGroups request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?

        public init(dBClusterParameterGroupName: String? = nil, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil) {
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
        }
    }

    public struct DescribeDBClusterParametersMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The name of a specific DB cluster parameter group to return parameter details for. Constraints:   If supplied, must match the name of an existing DBClusterParameterGroup.
        public let dBClusterParameterGroupName: String
        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribeDBClusterParameters request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?
        ///  A value that indicates to return only parameters for a specific source. Parameter sources can be engine, service, or customer.
        public let source: String?

        public init(dBClusterParameterGroupName: String, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil, source: String? = nil) {
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
            case source = "Source"
        }
    }

    public struct DescribeDBClusterSnapshotAttributesMessage: AWSEncodableShape {
        /// The identifier for the DB cluster snapshot to describe the attributes for.
        public let dBClusterSnapshotIdentifier: String

        public init(dBClusterSnapshotIdentifier: String) {
            self.dBClusterSnapshotIdentifier = dBClusterSnapshotIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterSnapshotIdentifier = "DBClusterSnapshotIdentifier"
        }
    }

    public struct DescribeDBClusterSnapshotAttributesResult: AWSDecodableShape {
        public let dBClusterSnapshotAttributesResult: DBClusterSnapshotAttributesResult?

        public init(dBClusterSnapshotAttributesResult: DBClusterSnapshotAttributesResult? = nil) {
            self.dBClusterSnapshotAttributesResult = dBClusterSnapshotAttributesResult
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterSnapshotAttributesResult = "DBClusterSnapshotAttributesResult"
        }
    }

    public struct DescribeDBClusterSnapshotsMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The ID of the DB cluster to retrieve the list of DB cluster snapshots for. This parameter can't be used in conjunction with the DBClusterSnapshotIdentifier parameter. This parameter is not case-sensitive. Constraints:   If supplied, must match the identifier of an existing DBCluster.
        public let dBClusterIdentifier: String?
        /// A specific DB cluster snapshot identifier to describe. This parameter can't be used in conjunction with the DBClusterIdentifier parameter. This value is stored as a lowercase string. Constraints:   If supplied, must match the identifier of an existing DBClusterSnapshot.   If this identifier is for an automated snapshot, the SnapshotType parameter must also be specified.
        public let dBClusterSnapshotIdentifier: String?
        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        /// True to include manual DB cluster snapshots that are public and can be copied or restored by any AWS account, and otherwise false. The default is false. The default is false. You can share a manual DB cluster snapshot as public by using the ModifyDBClusterSnapshotAttribute API action.
        public let includePublic: Bool?
        /// True to include shared manual DB cluster snapshots from other AWS accounts that this AWS account has been given permission to copy or restore, and otherwise false. The default is false. You can give an AWS account permission to restore a manual DB cluster snapshot from another AWS account by the ModifyDBClusterSnapshotAttribute API action.
        public let includeShared: Bool?
        /// An optional pagination token provided by a previous DescribeDBClusterSnapshots request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?
        /// The type of DB cluster snapshots to be returned. You can specify one of the following values:    automated - Return all DB cluster snapshots that have been automatically taken by Amazon Neptune for my AWS account.    manual - Return all DB cluster snapshots that have been taken by my AWS account.    shared - Return all manual DB cluster snapshots that have been shared to my AWS account.    public - Return all DB cluster snapshots that have been marked as public.   If you don't specify a SnapshotType value, then both automated and manual DB cluster snapshots are returned. You can include shared DB cluster snapshots with these results by setting the IncludeShared parameter to true. You can include public DB cluster snapshots with these results by setting the IncludePublic parameter to true. The IncludeShared and IncludePublic parameters don't apply for SnapshotType values of manual or automated. The IncludePublic parameter doesn't apply when SnapshotType is set to shared. The IncludeShared parameter doesn't apply when SnapshotType is set to public.
        public let snapshotType: String?

        public init(dBClusterIdentifier: String? = nil, dBClusterSnapshotIdentifier: String? = nil, filters: [Filter]? = nil, includePublic: Bool? = nil, includeShared: Bool? = nil, marker: String? = nil, maxRecords: Int? = nil, snapshotType: String? = nil) {
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBClusterSnapshotIdentifier = dBClusterSnapshotIdentifier
            self.filters = filters
            self.includePublic = includePublic
            self.includeShared = includeShared
            self.marker = marker
            self.maxRecords = maxRecords
            self.snapshotType = snapshotType
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBClusterSnapshotIdentifier = "DBClusterSnapshotIdentifier"
            case filters = "Filters"
            case includePublic = "IncludePublic"
            case includeShared = "IncludeShared"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
            case snapshotType = "SnapshotType"
        }
    }

    public struct DescribeDBClustersMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The user-supplied DB cluster identifier. If this parameter is specified, information from only the specific DB cluster is returned. This parameter isn't case-sensitive. Constraints:   If supplied, must match an existing DBClusterIdentifier.
        public let dBClusterIdentifier: String?
        /// A filter that specifies one or more DB clusters to describe. Supported filters:    db-cluster-id - Accepts DB cluster identifiers and DB cluster Amazon Resource Names (ARNs). The results list will only include information about the DB clusters identified by these ARNs.    engine - Accepts an engine name (such as neptune), and restricts the results list to DB clusters created by that engine.   For example, to invoke this API from the AWS CLI and filter so that only Neptune DB clusters are returned, you could use the following command:
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        /// An optional pagination token provided by a previous DescribeDBClusters request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?

        public init(dBClusterIdentifier: String? = nil, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil) {
            self.dBClusterIdentifier = dBClusterIdentifier
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
        }
    }

    public struct DescribeDBEngineVersionsMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The name of a specific DB parameter group family to return details for. Constraints:   If supplied, must match an existing DBParameterGroupFamily.
        public let dBParameterGroupFamily: String?
        /// Indicates that only the default version of the specified engine or engine and major version combination is returned.
        public let defaultOnly: Bool?
        /// The database engine to return.
        public let engine: String?
        /// The database engine version to return. Example: 5.1.49
        public let engineVersion: String?
        /// Not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        /// If this parameter is specified and the requested engine supports the CharacterSetName parameter for CreateDBInstance, the response includes a list of supported character sets for each engine version.
        public let listSupportedCharacterSets: Bool?
        /// If this parameter is specified and the requested engine supports the TimeZone parameter for CreateDBInstance, the response includes a list of supported time zones for each engine version.
        public let listSupportedTimezones: Bool?
        ///  An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        ///  The maximum number of records to include in the response. If more than the MaxRecords value is available, a pagination token called a marker is included in the response so that the following results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?

        public init(dBParameterGroupFamily: String? = nil, defaultOnly: Bool? = nil, engine: String? = nil, engineVersion: String? = nil, filters: [Filter]? = nil, listSupportedCharacterSets: Bool? = nil, listSupportedTimezones: Bool? = nil, marker: String? = nil, maxRecords: Int? = nil) {
            self.dBParameterGroupFamily = dBParameterGroupFamily
            self.defaultOnly = defaultOnly
            self.engine = engine
            self.engineVersion = engineVersion
            self.filters = filters
            self.listSupportedCharacterSets = listSupportedCharacterSets
            self.listSupportedTimezones = listSupportedTimezones
            self.marker = marker
            self.maxRecords = maxRecords
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupFamily = "DBParameterGroupFamily"
            case defaultOnly = "DefaultOnly"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case filters = "Filters"
            case listSupportedCharacterSets = "ListSupportedCharacterSets"
            case listSupportedTimezones = "ListSupportedTimezones"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
        }
    }

    public struct DescribeDBInstancesMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The user-supplied instance identifier. If this parameter is specified, information from only the specific DB instance is returned. This parameter isn't case-sensitive. Constraints:   If supplied, must match the identifier of an existing DBInstance.
        public let dBInstanceIdentifier: String?
        /// A filter that specifies one or more DB instances to describe. Supported filters:    db-cluster-id - Accepts DB cluster identifiers and DB cluster Amazon Resource Names (ARNs). The results list will only include information about the DB instances associated with the DB clusters identified by these ARNs.    engine - Accepts an engine name (such as neptune), and restricts the results list to DB instances created by that engine.   For example, to invoke this API from the AWS CLI and filter so that only Neptune DB instances are returned, you could use the following command:
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribeDBInstances request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?

        public init(dBInstanceIdentifier: String? = nil, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil) {
            self.dBInstanceIdentifier = dBInstanceIdentifier
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstanceIdentifier = "DBInstanceIdentifier"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
        }
    }

    public struct DescribeDBParameterGroupsMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The name of a specific DB parameter group to return details for. Constraints:   If supplied, must match the name of an existing DBClusterParameterGroup.
        public let dBParameterGroupName: String?
        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        /// An optional pagination token provided by a previous DescribeDBParameterGroups request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?

        public init(dBParameterGroupName: String? = nil, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil) {
            self.dBParameterGroupName = dBParameterGroupName
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupName = "DBParameterGroupName"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
        }
    }

    public struct DescribeDBParametersMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The name of a specific DB parameter group to return details for. Constraints:   If supplied, must match the name of an existing DBParameterGroup.
        public let dBParameterGroupName: String
        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        /// An optional pagination token provided by a previous DescribeDBParameters request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?
        /// The parameter types to return. Default: All parameter types returned Valid Values: user | system | engine-default
        public let source: String?

        public init(dBParameterGroupName: String, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil, source: String? = nil) {
            self.dBParameterGroupName = dBParameterGroupName
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupName = "DBParameterGroupName"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
            case source = "Source"
        }
    }

    public struct DescribeDBSubnetGroupsMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The name of the DB subnet group to return details for.
        public let dBSubnetGroupName: String?
        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribeDBSubnetGroups request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?

        public init(dBSubnetGroupName: String? = nil, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil) {
            self.dBSubnetGroupName = dBSubnetGroupName
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
        }

        private enum CodingKeys: String, CodingKey {
            case dBSubnetGroupName = "DBSubnetGroupName"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
        }
    }

    public struct DescribeEngineDefaultClusterParametersMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The name of the DB cluster parameter group family to return engine parameter information for.
        public let dBParameterGroupFamily: String
        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribeEngineDefaultClusterParameters request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?

        public init(dBParameterGroupFamily: String, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil) {
            self.dBParameterGroupFamily = dBParameterGroupFamily
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupFamily = "DBParameterGroupFamily"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
        }
    }

    public struct DescribeEngineDefaultClusterParametersResult: AWSDecodableShape {
        public let engineDefaults: EngineDefaults?

        public init(engineDefaults: EngineDefaults? = nil) {
            self.engineDefaults = engineDefaults
        }

        private enum CodingKeys: String, CodingKey {
            case engineDefaults = "EngineDefaults"
        }
    }

    public struct DescribeEngineDefaultParametersMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The name of the DB parameter group family.
        public let dBParameterGroupFamily: String
        /// Not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribeEngineDefaultParameters request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?

        public init(dBParameterGroupFamily: String, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil) {
            self.dBParameterGroupFamily = dBParameterGroupFamily
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupFamily = "DBParameterGroupFamily"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
        }
    }

    public struct DescribeEngineDefaultParametersResult: AWSDecodableShape {
        public let engineDefaults: EngineDefaults?

        public init(engineDefaults: EngineDefaults? = nil) {
            self.engineDefaults = engineDefaults
        }

        private enum CodingKeys: String, CodingKey {
            case engineDefaults = "EngineDefaults"
        }
    }

    public struct DescribeEventCategoriesMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        /// The type of source that is generating the events. Valid values: db-instance | db-parameter-group | db-security-group | db-snapshot
        public let sourceType: String?

        public init(filters: [Filter]? = nil, sourceType: String? = nil) {
            self.filters = filters
            self.sourceType = sourceType
        }

        private enum CodingKeys: String, CodingKey {
            case filters = "Filters"
            case sourceType = "SourceType"
        }
    }

    public struct DescribeEventSubscriptionsMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribeOrderableDBInstanceOptions request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords .
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?
        /// The name of the event notification subscription you want to describe.
        public let subscriptionName: String?

        public init(filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil, subscriptionName: String? = nil) {
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
            self.subscriptionName = subscriptionName
        }

        private enum CodingKeys: String, CodingKey {
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
            case subscriptionName = "SubscriptionName"
        }
    }

    public struct DescribeEventsMessage: AWSEncodableShape {
        public struct _EventCategoriesEncoding: ArrayCoderProperties { public static let member = "EventCategory" }
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The number of minutes to retrieve events for. Default: 60
        public let duration: Int?
        ///  The end of the time interval for which to retrieve events, specified in ISO 8601 format. For more information about ISO 8601, go to the ISO8601 Wikipedia page.  Example: 2009-07-08T18:00Z
        public let endTime: Date?
        /// A list of event categories that trigger notifications for a event notification subscription.
        @OptionalCustomCoding<ArrayCoder<_EventCategoriesEncoding, String>>
        public var eventCategories: [String]?
        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribeEvents request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?
        /// The identifier of the event source for which events are returned. If not specified, then all sources are included in the response. Constraints:   If SourceIdentifier is supplied, SourceType must also be provided.   If the source type is DBInstance, then a DBInstanceIdentifier must be supplied.   If the source type is DBSecurityGroup, a DBSecurityGroupName must be supplied.   If the source type is DBParameterGroup, a DBParameterGroupName must be supplied.   If the source type is DBSnapshot, a DBSnapshotIdentifier must be supplied.   Cannot end with a hyphen or contain two consecutive hyphens.
        public let sourceIdentifier: String?
        /// The event source to retrieve events for. If no value is specified, all events are returned.
        public let sourceType: SourceType?
        ///  The beginning of the time interval to retrieve events for, specified in ISO 8601 format. For more information about ISO 8601, go to the ISO8601 Wikipedia page.  Example: 2009-07-08T18:00Z
        public let startTime: Date?

        public init(duration: Int? = nil, endTime: Date? = nil, eventCategories: [String]? = nil, filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil, sourceIdentifier: String? = nil, sourceType: SourceType? = nil, startTime: Date? = nil) {
            self.duration = duration
            self.endTime = endTime
            self.eventCategories = eventCategories
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
            self.sourceIdentifier = sourceIdentifier
            self.sourceType = sourceType
            self.startTime = startTime
        }

        private enum CodingKeys: String, CodingKey {
            case duration = "Duration"
            case endTime = "EndTime"
            case eventCategories = "EventCategories"
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
            case sourceIdentifier = "SourceIdentifier"
            case sourceType = "SourceType"
            case startTime = "StartTime"
        }
    }

    public struct DescribeOrderableDBInstanceOptionsMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// The DB instance class filter value. Specify this parameter to show only the available offerings matching the specified DB instance class.
        public let dBInstanceClass: String?
        /// The name of the engine to retrieve DB instance options for.
        public let engine: String
        /// The engine version filter value. Specify this parameter to show only the available offerings matching the specified engine version.
        public let engineVersion: String?
        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        /// The license model filter value. Specify this parameter to show only the available offerings matching the specified license model.
        public let licenseModel: String?
        ///  An optional pagination token provided by a previous DescribeOrderableDBInstanceOptions request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords .
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?
        /// The VPC filter value. Specify this parameter to show only the available VPC or non-VPC offerings.
        public let vpc: Bool?

        public init(dBInstanceClass: String? = nil, engine: String, engineVersion: String? = nil, filters: [Filter]? = nil, licenseModel: String? = nil, marker: String? = nil, maxRecords: Int? = nil, vpc: Bool? = nil) {
            self.dBInstanceClass = dBInstanceClass
            self.engine = engine
            self.engineVersion = engineVersion
            self.filters = filters
            self.licenseModel = licenseModel
            self.marker = marker
            self.maxRecords = maxRecords
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstanceClass = "DBInstanceClass"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case filters = "Filters"
            case licenseModel = "LicenseModel"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
            case vpc = "Vpc"
        }
    }

    public struct DescribePendingMaintenanceActionsMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// A filter that specifies one or more resources to return pending maintenance actions for. Supported filters:    db-cluster-id - Accepts DB cluster identifiers and DB cluster Amazon Resource Names (ARNs). The results list will only include pending maintenance actions for the DB clusters identified by these ARNs.    db-instance-id - Accepts DB instance identifiers and DB instance ARNs. The results list will only include pending maintenance actions for the DB instances identified by these ARNs.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        ///  An optional pagination token provided by a previous DescribePendingMaintenanceActions request. If this parameter is specified, the response includes only records beyond the marker, up to a number of records specified by MaxRecords.
        public let marker: String?
        ///  The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. Default: 100 Constraints: Minimum 20, maximum 100.
        public let maxRecords: Int?
        /// The ARN of a resource to return pending maintenance actions for.
        public let resourceIdentifier: String?

        public init(filters: [Filter]? = nil, marker: String? = nil, maxRecords: Int? = nil, resourceIdentifier: String? = nil) {
            self.filters = filters
            self.marker = marker
            self.maxRecords = maxRecords
            self.resourceIdentifier = resourceIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case filters = "Filters"
            case marker = "Marker"
            case maxRecords = "MaxRecords"
            case resourceIdentifier = "ResourceIdentifier"
        }
    }

    public struct DescribeValidDBInstanceModificationsMessage: AWSEncodableShape {
        /// The customer identifier or the ARN of your DB instance.
        public let dBInstanceIdentifier: String

        public init(dBInstanceIdentifier: String) {
            self.dBInstanceIdentifier = dBInstanceIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstanceIdentifier = "DBInstanceIdentifier"
        }
    }

    public struct DescribeValidDBInstanceModificationsResult: AWSDecodableShape {
        public let validDBInstanceModificationsMessage: ValidDBInstanceModificationsMessage?

        public init(validDBInstanceModificationsMessage: ValidDBInstanceModificationsMessage? = nil) {
            self.validDBInstanceModificationsMessage = validDBInstanceModificationsMessage
        }

        private enum CodingKeys: String, CodingKey {
            case validDBInstanceModificationsMessage = "ValidDBInstanceModificationsMessage"
        }
    }

    public struct DomainMembership: AWSDecodableShape {
        /// The identifier of the Active Directory Domain.
        public let domain: String?
        /// The fully qualified domain name of the Active Directory Domain.
        public let fqdn: String?
        /// The name of the IAM role to be used when making API calls to the Directory Service.
        public let iAMRoleName: String?
        /// The status of the DB instance's Active Directory Domain membership, such as joined, pending-join, failed etc).
        public let status: String?

        public init(domain: String? = nil, fqdn: String? = nil, iAMRoleName: String? = nil, status: String? = nil) {
            self.domain = domain
            self.fqdn = fqdn
            self.iAMRoleName = iAMRoleName
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case domain = "Domain"
            case fqdn = "FQDN"
            case iAMRoleName = "IAMRoleName"
            case status = "Status"
        }
    }

    public struct DoubleRange: AWSDecodableShape {
        /// The minimum value in the range.
        public let from: Double?
        /// The maximum value in the range.
        public let to: Double?

        public init(from: Double? = nil, to: Double? = nil) {
            self.from = from
            self.to = to
        }

        private enum CodingKeys: String, CodingKey {
            case from = "From"
            case to = "To"
        }
    }

    public struct Endpoint: AWSDecodableShape {
        /// Specifies the DNS address of the DB instance.
        public let address: String?
        /// Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
        public let hostedZoneId: String?
        /// Specifies the port that the database engine is listening on.
        public let port: Int?

        public init(address: String? = nil, hostedZoneId: String? = nil, port: Int? = nil) {
            self.address = address
            self.hostedZoneId = hostedZoneId
            self.port = port
        }

        private enum CodingKeys: String, CodingKey {
            case address = "Address"
            case hostedZoneId = "HostedZoneId"
            case port = "Port"
        }
    }

    public struct EngineDefaults: AWSDecodableShape {
        public struct _ParametersEncoding: ArrayCoderProperties { public static let member = "Parameter" }

        /// Specifies the name of the DB parameter group family that the engine default parameters apply to.
        public let dBParameterGroupFamily: String?
        ///  An optional pagination token provided by a previous EngineDefaults request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords .
        public let marker: String?
        /// Contains a list of engine default parameters.
        @OptionalCustomCoding<ArrayCoder<_ParametersEncoding, Parameter>>
        public var parameters: [Parameter]?

        public init(dBParameterGroupFamily: String? = nil, marker: String? = nil, parameters: [Parameter]? = nil) {
            self.dBParameterGroupFamily = dBParameterGroupFamily
            self.marker = marker
            self.parameters = parameters
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupFamily = "DBParameterGroupFamily"
            case marker = "Marker"
            case parameters = "Parameters"
        }
    }

    public struct Event: AWSDecodableShape {
        public struct _EventCategoriesEncoding: ArrayCoderProperties { public static let member = "EventCategory" }

        /// Specifies the date and time of the event.
        public let date: Date?
        /// Specifies the category for the event.
        @OptionalCustomCoding<ArrayCoder<_EventCategoriesEncoding, String>>
        public var eventCategories: [String]?
        /// Provides the text of this event.
        public let message: String?
        /// The Amazon Resource Name (ARN) for the event.
        public let sourceArn: String?
        /// Provides the identifier for the source of the event.
        public let sourceIdentifier: String?
        /// Specifies the source type for this event.
        public let sourceType: SourceType?

        public init(date: Date? = nil, eventCategories: [String]? = nil, message: String? = nil, sourceArn: String? = nil, sourceIdentifier: String? = nil, sourceType: SourceType? = nil) {
            self.date = date
            self.eventCategories = eventCategories
            self.message = message
            self.sourceArn = sourceArn
            self.sourceIdentifier = sourceIdentifier
            self.sourceType = sourceType
        }

        private enum CodingKeys: String, CodingKey {
            case date = "Date"
            case eventCategories = "EventCategories"
            case message = "Message"
            case sourceArn = "SourceArn"
            case sourceIdentifier = "SourceIdentifier"
            case sourceType = "SourceType"
        }
    }

    public struct EventCategoriesMap: AWSDecodableShape {
        public struct _EventCategoriesEncoding: ArrayCoderProperties { public static let member = "EventCategory" }

        /// The event categories for the specified source type
        @OptionalCustomCoding<ArrayCoder<_EventCategoriesEncoding, String>>
        public var eventCategories: [String]?
        /// The source type that the returned categories belong to
        public let sourceType: String?

        public init(eventCategories: [String]? = nil, sourceType: String? = nil) {
            self.eventCategories = eventCategories
            self.sourceType = sourceType
        }

        private enum CodingKeys: String, CodingKey {
            case eventCategories = "EventCategories"
            case sourceType = "SourceType"
        }
    }

    public struct EventCategoriesMessage: AWSDecodableShape {
        public struct _EventCategoriesMapListEncoding: ArrayCoderProperties { public static let member = "EventCategoriesMap" }

        /// A list of EventCategoriesMap data types.
        @OptionalCustomCoding<ArrayCoder<_EventCategoriesMapListEncoding, EventCategoriesMap>>
        public var eventCategoriesMapList: [EventCategoriesMap]?

        public init(eventCategoriesMapList: [EventCategoriesMap]? = nil) {
            self.eventCategoriesMapList = eventCategoriesMapList
        }

        private enum CodingKeys: String, CodingKey {
            case eventCategoriesMapList = "EventCategoriesMapList"
        }
    }

    public struct EventSubscription: AWSDecodableShape {
        public struct _EventCategoriesListEncoding: ArrayCoderProperties { public static let member = "EventCategory" }
        public struct _SourceIdsListEncoding: ArrayCoderProperties { public static let member = "SourceId" }

        /// The AWS customer account associated with the event notification subscription.
        public let customerAwsId: String?
        /// The event notification subscription Id.
        public let custSubscriptionId: String?
        /// A Boolean value indicating if the subscription is enabled. True indicates the subscription is enabled.
        public let enabled: Bool?
        /// A list of event categories for the event notification subscription.
        @OptionalCustomCoding<ArrayCoder<_EventCategoriesListEncoding, String>>
        public var eventCategoriesList: [String]?
        /// The Amazon Resource Name (ARN) for the event subscription.
        public let eventSubscriptionArn: String?
        /// The topic ARN of the event notification subscription.
        public let snsTopicArn: String?
        /// A list of source IDs for the event notification subscription.
        @OptionalCustomCoding<ArrayCoder<_SourceIdsListEncoding, String>>
        public var sourceIdsList: [String]?
        /// The source type for the event notification subscription.
        public let sourceType: String?
        /// The status of the event notification subscription. Constraints: Can be one of the following: creating | modifying | deleting | active | no-permission | topic-not-exist The status "no-permission" indicates that Neptune no longer has permission to post to the SNS topic. The status "topic-not-exist" indicates that the topic was deleted after the subscription was created.
        public let status: String?
        /// The time the event notification subscription was created.
        public let subscriptionCreationTime: String?

        public init(customerAwsId: String? = nil, custSubscriptionId: String? = nil, enabled: Bool? = nil, eventCategoriesList: [String]? = nil, eventSubscriptionArn: String? = nil, snsTopicArn: String? = nil, sourceIdsList: [String]? = nil, sourceType: String? = nil, status: String? = nil, subscriptionCreationTime: String? = nil) {
            self.customerAwsId = customerAwsId
            self.custSubscriptionId = custSubscriptionId
            self.enabled = enabled
            self.eventCategoriesList = eventCategoriesList
            self.eventSubscriptionArn = eventSubscriptionArn
            self.snsTopicArn = snsTopicArn
            self.sourceIdsList = sourceIdsList
            self.sourceType = sourceType
            self.status = status
            self.subscriptionCreationTime = subscriptionCreationTime
        }

        private enum CodingKeys: String, CodingKey {
            case customerAwsId = "CustomerAwsId"
            case custSubscriptionId = "CustSubscriptionId"
            case enabled = "Enabled"
            case eventCategoriesList = "EventCategoriesList"
            case eventSubscriptionArn = "EventSubscriptionArn"
            case snsTopicArn = "SnsTopicArn"
            case sourceIdsList = "SourceIdsList"
            case sourceType = "SourceType"
            case status = "Status"
            case subscriptionCreationTime = "SubscriptionCreationTime"
        }
    }

    public struct EventSubscriptionsMessage: AWSDecodableShape {
        public struct _EventSubscriptionsListEncoding: ArrayCoderProperties { public static let member = "EventSubscription" }

        /// A list of EventSubscriptions data types.
        @OptionalCustomCoding<ArrayCoder<_EventSubscriptionsListEncoding, EventSubscription>>
        public var eventSubscriptionsList: [EventSubscription]?
        ///  An optional pagination token provided by a previous DescribeOrderableDBInstanceOptions request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.
        public let marker: String?

        public init(eventSubscriptionsList: [EventSubscription]? = nil, marker: String? = nil) {
            self.eventSubscriptionsList = eventSubscriptionsList
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case eventSubscriptionsList = "EventSubscriptionsList"
            case marker = "Marker"
        }
    }

    public struct EventsMessage: AWSDecodableShape {
        public struct _EventsEncoding: ArrayCoderProperties { public static let member = "Event" }

        ///  A list of Event instances.
        @OptionalCustomCoding<ArrayCoder<_EventsEncoding, Event>>
        public var events: [Event]?
        ///  An optional pagination token provided by a previous Events request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords .
        public let marker: String?

        public init(events: [Event]? = nil, marker: String? = nil) {
            self.events = events
            self.marker = marker
        }

        private enum CodingKeys: String, CodingKey {
            case events = "Events"
            case marker = "Marker"
        }
    }

    public struct FailoverDBClusterMessage: AWSEncodableShape {
        /// A DB cluster identifier to force a failover for. This parameter is not case-sensitive. Constraints:   Must match the identifier of an existing DBCluster.
        public let dBClusterIdentifier: String?
        /// The name of the instance to promote to the primary instance. You must specify the instance identifier for an Read Replica in the DB cluster. For example, mydbcluster-replica1.
        public let targetDBInstanceIdentifier: String?

        public init(dBClusterIdentifier: String? = nil, targetDBInstanceIdentifier: String? = nil) {
            self.dBClusterIdentifier = dBClusterIdentifier
            self.targetDBInstanceIdentifier = targetDBInstanceIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
            case targetDBInstanceIdentifier = "TargetDBInstanceIdentifier"
        }
    }

    public struct FailoverDBClusterResult: AWSDecodableShape {
        public let dBCluster: DBCluster?

        public init(dBCluster: DBCluster? = nil) {
            self.dBCluster = dBCluster
        }

        private enum CodingKeys: String, CodingKey {
            case dBCluster = "DBCluster"
        }
    }

    public struct Filter: AWSEncodableShape {
        public struct _ValuesEncoding: ArrayCoderProperties { public static let member = "Value" }

        /// This parameter is not currently supported.
        public let name: String
        /// This parameter is not currently supported.
        @CustomCoding<ArrayCoder<_ValuesEncoding, String>>
        public var values: [String]

        public init(name: String, values: [String]) {
            self.name = name
            self.values = values
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case values = "Values"
        }
    }

    public struct ListTagsForResourceMessage: AWSEncodableShape {
        public struct _FiltersEncoding: ArrayCoderProperties { public static let member = "Filter" }

        /// This parameter is not currently supported.
        @OptionalCustomCoding<ArrayCoder<_FiltersEncoding, Filter>>
        public var filters: [Filter]?
        /// The Amazon Neptune resource with tags to be listed. This value is an Amazon Resource Name (ARN). For information about creating an ARN, see  Constructing an Amazon Resource Name (ARN).
        public let resourceName: String

        public init(filters: [Filter]? = nil, resourceName: String) {
            self.filters = filters
            self.resourceName = resourceName
        }

        private enum CodingKeys: String, CodingKey {
            case filters = "Filters"
            case resourceName = "ResourceName"
        }
    }

    public struct ModifyDBClusterEndpointMessage: AWSEncodableShape {
        /// The identifier of the endpoint to modify. This parameter is stored as a lowercase string.
        public let dBClusterEndpointIdentifier: String
        /// The type of the endpoint. One of: READER, WRITER, ANY.
        public let endpointType: String?
        /// List of DB instance identifiers that aren't part of the custom endpoint group. All other eligible instances are reachable through the custom endpoint. Only relevant if the list of static members is empty.
        @OptionalCustomCoding<StandardArrayCoder>
        public var excludedMembers: [String]?
        /// List of DB instance identifiers that are part of the custom endpoint group.
        @OptionalCustomCoding<StandardArrayCoder>
        public var staticMembers: [String]?

        public init(dBClusterEndpointIdentifier: String, endpointType: String? = nil, excludedMembers: [String]? = nil, staticMembers: [String]? = nil) {
            self.dBClusterEndpointIdentifier = dBClusterEndpointIdentifier
            self.endpointType = endpointType
            self.excludedMembers = excludedMembers
            self.staticMembers = staticMembers
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterEndpointIdentifier = "DBClusterEndpointIdentifier"
            case endpointType = "EndpointType"
            case excludedMembers = "ExcludedMembers"
            case staticMembers = "StaticMembers"
        }
    }

    public struct ModifyDBClusterEndpointOutput: AWSDecodableShape {
        /// The type associated with a custom endpoint. One of: READER, WRITER, ANY.
        public let customEndpointType: String?
        /// The Amazon Resource Name (ARN) for the endpoint.
        public let dBClusterEndpointArn: String?
        /// The identifier associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterEndpointIdentifier: String?
        /// A unique system-generated identifier for an endpoint. It remains the same for the whole life of the endpoint.
        public let dBClusterEndpointResourceIdentifier: String?
        /// The DB cluster identifier of the DB cluster associated with the endpoint. This parameter is stored as a lowercase string.
        public let dBClusterIdentifier: String?
        /// The DNS address of the endpoint.
        public let endpoint: String?
        /// The type of the endpoint. One of: READER, WRITER, CUSTOM.
        public let endpointType: String?
        /// List of DB instance identifiers that aren't part of the custom endpoint group. All other eligible instances are reachable through the custom endpoint. Only relevant if the list of static members is empty.
        @OptionalCustomCoding<StandardArrayCoder>
        public var excludedMembers: [String]?
        /// List of DB instance identifiers that are part of the custom endpoint group.
        @OptionalCustomCoding<StandardArrayCoder>
        public var staticMembers: [String]?
        /// The current status of the endpoint. One of: creating, available, deleting, inactive, modifying. The inactive state applies to an endpoint that cannot be used for a certain kind of cluster, such as a writer endpoint for a read-only secondary cluster in a global database.
        public let status: String?

        public init(customEndpointType: String? = nil, dBClusterEndpointArn: String? = nil, dBClusterEndpointIdentifier: String? = nil, dBClusterEndpointResourceIdentifier: String? = nil, dBClusterIdentifier: String? = nil, endpoint: String? = nil, endpointType: String? = nil, excludedMembers: [String]? = nil, staticMembers: [String]? = nil, status: String? = nil) {
            self.customEndpointType = customEndpointType
            self.dBClusterEndpointArn = dBClusterEndpointArn
            self.dBClusterEndpointIdentifier = dBClusterEndpointIdentifier
            self.dBClusterEndpointResourceIdentifier = dBClusterEndpointResourceIdentifier
            self.dBClusterIdentifier = dBClusterIdentifier
            self.endpoint = endpoint
            self.endpointType = endpointType
            self.excludedMembers = excludedMembers
            self.staticMembers = staticMembers
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case customEndpointType = "CustomEndpointType"
            case dBClusterEndpointArn = "DBClusterEndpointArn"
            case dBClusterEndpointIdentifier = "DBClusterEndpointIdentifier"
            case dBClusterEndpointResourceIdentifier = "DBClusterEndpointResourceIdentifier"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case endpoint = "Endpoint"
            case endpointType = "EndpointType"
            case excludedMembers = "ExcludedMembers"
            case staticMembers = "StaticMembers"
            case status = "Status"
        }
    }

    public struct ModifyDBClusterMessage: AWSEncodableShape {
        public struct _VpcSecurityGroupIdsEncoding: ArrayCoderProperties { public static let member = "VpcSecurityGroupId" }

        /// A value that specifies whether the modifications in this request and any pending modifications are asynchronously applied as soon as possible, regardless of the PreferredMaintenanceWindow setting for the DB cluster. If this parameter is set to false, changes to the DB cluster are applied during the next maintenance window. The ApplyImmediately parameter only affects the NewDBClusterIdentifier and MasterUserPassword values. If you set the ApplyImmediately parameter value to false, then changes to the NewDBClusterIdentifier and MasterUserPassword values are applied during the next maintenance window. All other changes are applied immediately, regardless of the value of the ApplyImmediately parameter. Default: false
        public let applyImmediately: Bool?
        /// The number of days for which automated backups are retained. You must specify a minimum value of 1. Default: 1 Constraints:   Must be a value from 1 to 35
        public let backupRetentionPeriod: Int?
        /// The configuration setting for the log types to be enabled for export to CloudWatch Logs for a specific DB cluster.
        public let cloudwatchLogsExportConfiguration: CloudwatchLogsExportConfiguration?
        /// The DB cluster identifier for the cluster being modified. This parameter is not case-sensitive. Constraints:   Must match the identifier of an existing DBCluster.
        public let dBClusterIdentifier: String
        /// The name of the DB cluster parameter group to use for the DB cluster.
        public let dBClusterParameterGroupName: String?
        /// A value that indicates whether the DB cluster has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection is disabled.
        public let deletionProtection: Bool?
        /// True to enable mapping of AWS Identity and Access Management (IAM) accounts to database accounts, and otherwise false. Default: false
        public let enableIAMDatabaseAuthentication: Bool?
        /// The version number of the database engine to which you want to upgrade. Changing this parameter results in an outage. The change is applied during the next maintenance window unless the ApplyImmediately parameter is set to true. For a list of valid engine versions, see Engine Releases for Amazon Neptune, or call DescribeDBEngineVersions.
        public let engineVersion: String?
        /// The new password for the master database user. This password can contain any printable ASCII character except "/", """, or "@". Constraints: Must contain from 8 to 41 characters.
        public let masterUserPassword: String?
        /// The new DB cluster identifier for the DB cluster when renaming a DB cluster. This value is stored as a lowercase string. Constraints:   Must contain from 1 to 63 letters, numbers, or hyphens   The first character must be a letter   Cannot end with a hyphen or contain two consecutive hyphens   Example: my-cluster2
        public let newDBClusterIdentifier: String?
        ///  (Not supported by Neptune)
        public let optionGroupName: String?
        /// The port number on which the DB cluster accepts connections. Constraints: Value must be 1150-65535  Default: The same port as the original DB cluster.
        public let port: Int?
        /// The daily time range during which automated backups are created if automated backups are enabled, using the BackupRetentionPeriod parameter. The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region. Constraints:   Must be in the format hh24:mi-hh24:mi.   Must be in Universal Coordinated Time (UTC).   Must not conflict with the preferred maintenance window.   Must be at least 30 minutes.
        public let preferredBackupWindow: String?
        /// The weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC). Format: ddd:hh24:mi-ddd:hh24:mi  The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region, occurring on a random day of the week. Valid Days: Mon, Tue, Wed, Thu, Fri, Sat, Sun. Constraints: Minimum 30-minute window.
        public let preferredMaintenanceWindow: String?
        /// A list of VPC security groups that the DB cluster will belong to.
        @OptionalCustomCoding<ArrayCoder<_VpcSecurityGroupIdsEncoding, String>>
        public var vpcSecurityGroupIds: [String]?

        public init(applyImmediately: Bool? = nil, backupRetentionPeriod: Int? = nil, cloudwatchLogsExportConfiguration: CloudwatchLogsExportConfiguration? = nil, dBClusterIdentifier: String, dBClusterParameterGroupName: String? = nil, deletionProtection: Bool? = nil, enableIAMDatabaseAuthentication: Bool? = nil, engineVersion: String? = nil, masterUserPassword: String? = nil, newDBClusterIdentifier: String? = nil, optionGroupName: String? = nil, port: Int? = nil, preferredBackupWindow: String? = nil, preferredMaintenanceWindow: String? = nil, vpcSecurityGroupIds: [String]? = nil) {
            self.applyImmediately = applyImmediately
            self.backupRetentionPeriod = backupRetentionPeriod
            self.cloudwatchLogsExportConfiguration = cloudwatchLogsExportConfiguration
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.deletionProtection = deletionProtection
            self.enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication
            self.engineVersion = engineVersion
            self.masterUserPassword = masterUserPassword
            self.newDBClusterIdentifier = newDBClusterIdentifier
            self.optionGroupName = optionGroupName
            self.port = port
            self.preferredBackupWindow = preferredBackupWindow
            self.preferredMaintenanceWindow = preferredMaintenanceWindow
            self.vpcSecurityGroupIds = vpcSecurityGroupIds
        }

        private enum CodingKeys: String, CodingKey {
            case applyImmediately = "ApplyImmediately"
            case backupRetentionPeriod = "BackupRetentionPeriod"
            case cloudwatchLogsExportConfiguration = "CloudwatchLogsExportConfiguration"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case deletionProtection = "DeletionProtection"
            case enableIAMDatabaseAuthentication = "EnableIAMDatabaseAuthentication"
            case engineVersion = "EngineVersion"
            case masterUserPassword = "MasterUserPassword"
            case newDBClusterIdentifier = "NewDBClusterIdentifier"
            case optionGroupName = "OptionGroupName"
            case port = "Port"
            case preferredBackupWindow = "PreferredBackupWindow"
            case preferredMaintenanceWindow = "PreferredMaintenanceWindow"
            case vpcSecurityGroupIds = "VpcSecurityGroupIds"
        }
    }

    public struct ModifyDBClusterParameterGroupMessage: AWSEncodableShape {
        public struct _ParametersEncoding: ArrayCoderProperties { public static let member = "Parameter" }

        /// The name of the DB cluster parameter group to modify.
        public let dBClusterParameterGroupName: String
        /// A list of parameters in the DB cluster parameter group to modify.
        @CustomCoding<ArrayCoder<_ParametersEncoding, Parameter>>
        public var parameters: [Parameter]

        public init(dBClusterParameterGroupName: String, parameters: [Parameter]) {
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.parameters = parameters
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case parameters = "Parameters"
        }
    }

    public struct ModifyDBClusterResult: AWSDecodableShape {
        public let dBCluster: DBCluster?

        public init(dBCluster: DBCluster? = nil) {
            self.dBCluster = dBCluster
        }

        private enum CodingKeys: String, CodingKey {
            case dBCluster = "DBCluster"
        }
    }

    public struct ModifyDBClusterSnapshotAttributeMessage: AWSEncodableShape {
        public struct _ValuesToAddEncoding: ArrayCoderProperties { public static let member = "AttributeValue" }
        public struct _ValuesToRemoveEncoding: ArrayCoderProperties { public static let member = "AttributeValue" }

        /// The name of the DB cluster snapshot attribute to modify. To manage authorization for other AWS accounts to copy or restore a manual DB cluster snapshot, set this value to restore.
        public let attributeName: String
        /// The identifier for the DB cluster snapshot to modify the attributes for.
        public let dBClusterSnapshotIdentifier: String
        /// A list of DB cluster snapshot attributes to add to the attribute specified by AttributeName. To authorize other AWS accounts to copy or restore a manual DB cluster snapshot, set this list to include one or more AWS account IDs, or all to make the manual DB cluster snapshot restorable by any AWS account. Do not add the all value for any manual DB cluster snapshots that contain private information that you don't want available to all AWS accounts.
        @OptionalCustomCoding<ArrayCoder<_ValuesToAddEncoding, String>>
        public var valuesToAdd: [String]?
        /// A list of DB cluster snapshot attributes to remove from the attribute specified by AttributeName. To remove authorization for other AWS accounts to copy or restore a manual DB cluster snapshot, set this list to include one or more AWS account identifiers, or all to remove authorization for any AWS account to copy or restore the DB cluster snapshot. If you specify all, an AWS account whose account ID is explicitly added to the restore attribute can still copy or restore a manual DB cluster snapshot.
        @OptionalCustomCoding<ArrayCoder<_ValuesToRemoveEncoding, String>>
        public var valuesToRemove: [String]?

        public init(attributeName: String, dBClusterSnapshotIdentifier: String, valuesToAdd: [String]? = nil, valuesToRemove: [String]? = nil) {
            self.attributeName = attributeName
            self.dBClusterSnapshotIdentifier = dBClusterSnapshotIdentifier
            self.valuesToAdd = valuesToAdd
            self.valuesToRemove = valuesToRemove
        }

        private enum CodingKeys: String, CodingKey {
            case attributeName = "AttributeName"
            case dBClusterSnapshotIdentifier = "DBClusterSnapshotIdentifier"
            case valuesToAdd = "ValuesToAdd"
            case valuesToRemove = "ValuesToRemove"
        }
    }

    public struct ModifyDBClusterSnapshotAttributeResult: AWSDecodableShape {
        public let dBClusterSnapshotAttributesResult: DBClusterSnapshotAttributesResult?

        public init(dBClusterSnapshotAttributesResult: DBClusterSnapshotAttributesResult? = nil) {
            self.dBClusterSnapshotAttributesResult = dBClusterSnapshotAttributesResult
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterSnapshotAttributesResult = "DBClusterSnapshotAttributesResult"
        }
    }

    public struct ModifyDBInstanceMessage: AWSEncodableShape {
        public struct _DBSecurityGroupsEncoding: ArrayCoderProperties { public static let member = "DBSecurityGroupName" }
        public struct _VpcSecurityGroupIdsEncoding: ArrayCoderProperties { public static let member = "VpcSecurityGroupId" }

        /// The new amount of storage (in gibibytes) to allocate for the DB instance. Not applicable. Storage is managed by the DB Cluster.
        public let allocatedStorage: Int?
        /// Indicates that major version upgrades are allowed. Changing this parameter doesn't result in an outage and the change is asynchronously applied as soon as possible.
        public let allowMajorVersionUpgrade: Bool?
        /// Specifies whether the modifications in this request and any pending modifications are asynchronously applied as soon as possible, regardless of the PreferredMaintenanceWindow setting for the DB instance.  If this parameter is set to false, changes to the DB instance are applied during the next maintenance window. Some parameter changes can cause an outage and are applied on the next call to RebootDBInstance, or the next failure reboot. Default: false
        public let applyImmediately: Bool?
        ///  Indicates that minor version upgrades are applied automatically to the DB instance during the maintenance window. Changing this parameter doesn't result in an outage except in the following case and the change is asynchronously applied as soon as possible. An outage will result if this parameter is set to true during the maintenance window, and a newer minor version is available, and Neptune has enabled auto patching for that engine version.
        public let autoMinorVersionUpgrade: Bool?
        /// Not applicable. The retention period for automated backups is managed by the DB cluster. For more information, see ModifyDBCluster. Default: Uses existing setting
        public let backupRetentionPeriod: Int?
        /// Indicates the certificate that needs to be associated with the instance.
        public let cACertificateIdentifier: String?
        /// The configuration setting for the log types to be enabled for export to CloudWatch Logs for a specific DB instance or DB cluster.
        public let cloudwatchLogsExportConfiguration: CloudwatchLogsExportConfiguration?
        /// True to copy all tags from the DB instance to snapshots of the DB instance, and otherwise false. The default is false.
        public let copyTagsToSnapshot: Bool?
        /// The new compute and memory capacity of the DB instance, for example, db.m4.large. Not all DB instance classes are available in all AWS Regions. If you modify the DB instance class, an outage occurs during the change. The change is applied during the next maintenance window, unless ApplyImmediately is specified as true for this request. Default: Uses existing setting
        public let dBInstanceClass: String?
        /// The DB instance identifier. This value is stored as a lowercase string. Constraints:   Must match the identifier of an existing DBInstance.
        public let dBInstanceIdentifier: String
        /// The name of the DB parameter group to apply to the DB instance. Changing this setting doesn't result in an outage. The parameter group name itself is changed immediately, but the actual parameter changes are not applied until you reboot the instance without failover. The db instance will NOT be rebooted automatically and the parameter changes will NOT be applied during the next maintenance window. Default: Uses existing setting Constraints: The DB parameter group must be in the same DB parameter group family as this DB instance.
        public let dBParameterGroupName: String?
        /// The port number on which the database accepts connections. The value of the DBPortNumber parameter must not match any of the port values specified for options in the option group for the DB instance. Your database will restart when you change the DBPortNumber value regardless of the value of the ApplyImmediately parameter.  Default: 8182
        public let dBPortNumber: Int?
        /// A list of DB security groups to authorize on this DB instance. Changing this setting doesn't result in an outage and the change is asynchronously applied as soon as possible. Constraints:   If supplied, must match existing DBSecurityGroups.
        @OptionalCustomCoding<ArrayCoder<_DBSecurityGroupsEncoding, String>>
        public var dBSecurityGroups: [String]?
        /// The new DB subnet group for the DB instance. You can use this parameter to move your DB instance to a different VPC. Changing the subnet group causes an outage during the change. The change is applied during the next maintenance window, unless you specify true for the ApplyImmediately parameter. Constraints: If supplied, must match the name of an existing DBSubnetGroup. Example: mySubnetGroup
        public let dBSubnetGroupName: String?
        /// A value that indicates whether the DB instance has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection is disabled. See Deleting a DB Instance.
        public let deletionProtection: Bool?
        /// Not supported.
        public let domain: String?
        /// Not supported
        public let domainIAMRoleName: String?
        /// True to enable mapping of AWS Identity and Access Management (IAM) accounts to database accounts, and otherwise false. You can enable IAM database authentication for the following database engines Not applicable. Mapping AWS IAM accounts to database accounts is managed by the DB cluster. For more information, see ModifyDBCluster. Default: false
        public let enableIAMDatabaseAuthentication: Bool?
        ///  (Not supported by Neptune)
        public let enablePerformanceInsights: Bool?
        /// The version number of the database engine to upgrade to. Currently, setting this parameter has no effect. To upgrade your database engine to the most recent release, use the ApplyPendingMaintenanceAction API.
        public let engineVersion: String?
        /// The new Provisioned IOPS (I/O operations per second) value for the instance. Changing this setting doesn't result in an outage and the change is applied during the next maintenance window unless the ApplyImmediately parameter is set to true for this request. Default: Uses existing setting
        public let iops: Int?
        /// Not supported.
        public let licenseModel: String?
        /// Not applicable.
        public let masterUserPassword: String?
        /// The interval, in seconds, between points when Enhanced Monitoring metrics are collected for the DB instance. To disable collecting Enhanced Monitoring metrics, specify 0. The default is 0. If MonitoringRoleArn is specified, then you must also set MonitoringInterval to a value other than 0. Valid Values: 0, 1, 5, 10, 15, 30, 60
        public let monitoringInterval: Int?
        /// The ARN for the IAM role that permits Neptune to send enhanced monitoring metrics to Amazon CloudWatch Logs. For example, arn:aws:iam:123456789012:role/emaccess. If MonitoringInterval is set to a value other than 0, then you must supply a MonitoringRoleArn value.
        public let monitoringRoleArn: String?
        /// Specifies if the DB instance is a Multi-AZ deployment. Changing this parameter doesn't result in an outage and the change is applied during the next maintenance window unless the ApplyImmediately parameter is set to true for this request.
        public let multiAZ: Bool?
        ///  The new DB instance identifier for the DB instance when renaming a DB instance. When you change the DB instance identifier, an instance reboot will occur immediately if you set Apply Immediately to true, or will occur during the next maintenance window if Apply Immediately to false. This value is stored as a lowercase string. Constraints:   Must contain from 1 to 63 letters, numbers, or hyphens.   The first character must be a letter.   Cannot end with a hyphen or contain two consecutive hyphens.   Example: mydbinstance
        public let newDBInstanceIdentifier: String?
        ///  (Not supported by Neptune)
        public let optionGroupName: String?
        ///  (Not supported by Neptune)
        public let performanceInsightsKMSKeyId: String?
        ///  The daily time range during which automated backups are created if automated backups are enabled. Not applicable. The daily time range for creating automated backups is managed by the DB cluster. For more information, see ModifyDBCluster. Constraints:   Must be in the format hh24:mi-hh24:mi   Must be in Universal Time Coordinated (UTC)   Must not conflict with the preferred maintenance window   Must be at least 30 minutes
        public let preferredBackupWindow: String?
        /// The weekly time range (in UTC) during which system maintenance can occur, which might result in an outage. Changing this parameter doesn't result in an outage, except in the following situation, and the change is asynchronously applied as soon as possible. If there are pending actions that cause a reboot, and the maintenance window is changed to include the current time, then changing this parameter will cause a reboot of the DB instance. If moving this window to the current time, there must be at least 30 minutes between the current time and end of the window to ensure pending changes are applied. Default: Uses existing setting Format: ddd:hh24:mi-ddd:hh24:mi Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun Constraints: Must be at least 30 minutes
        public let preferredMaintenanceWindow: String?
        /// A value that specifies the order in which a Read Replica is promoted to the primary instance after a failure of the existing primary instance. Default: 1 Valid Values: 0 - 15
        public let promotionTier: Int?
        /// Not supported.
        public let storageType: String?
        /// The ARN from the key store with which to associate the instance for TDE encryption.
        public let tdeCredentialArn: String?
        /// The password for the given ARN from the key store in order to access the device.
        public let tdeCredentialPassword: String?
        /// A list of EC2 VPC security groups to authorize on this DB instance. This change is asynchronously applied as soon as possible. Not applicable. The associated list of EC2 VPC security groups is managed by the DB cluster. For more information, see ModifyDBCluster. Constraints:   If supplied, must match existing VpcSecurityGroupIds.
        @OptionalCustomCoding<ArrayCoder<_VpcSecurityGroupIdsEncoding, String>>
        public var vpcSecurityGroupIds: [String]?

        public init(allocatedStorage: Int? = nil, allowMajorVersionUpgrade: Bool? = nil, applyImmediately: Bool? = nil, autoMinorVersionUpgrade: Bool? = nil, backupRetentionPeriod: Int? = nil, cACertificateIdentifier: String? = nil, cloudwatchLogsExportConfiguration: CloudwatchLogsExportConfiguration? = nil, copyTagsToSnapshot: Bool? = nil, dBInstanceClass: String? = nil, dBInstanceIdentifier: String, dBParameterGroupName: String? = nil, dBPortNumber: Int? = nil, dBSecurityGroups: [String]? = nil, dBSubnetGroupName: String? = nil, deletionProtection: Bool? = nil, domain: String? = nil, domainIAMRoleName: String? = nil, enableIAMDatabaseAuthentication: Bool? = nil, enablePerformanceInsights: Bool? = nil, engineVersion: String? = nil, iops: Int? = nil, licenseModel: String? = nil, masterUserPassword: String? = nil, monitoringInterval: Int? = nil, monitoringRoleArn: String? = nil, multiAZ: Bool? = nil, newDBInstanceIdentifier: String? = nil, optionGroupName: String? = nil, performanceInsightsKMSKeyId: String? = nil, preferredBackupWindow: String? = nil, preferredMaintenanceWindow: String? = nil, promotionTier: Int? = nil, storageType: String? = nil, tdeCredentialArn: String? = nil, tdeCredentialPassword: String? = nil, vpcSecurityGroupIds: [String]? = nil) {
            self.allocatedStorage = allocatedStorage
            self.allowMajorVersionUpgrade = allowMajorVersionUpgrade
            self.applyImmediately = applyImmediately
            self.autoMinorVersionUpgrade = autoMinorVersionUpgrade
            self.backupRetentionPeriod = backupRetentionPeriod
            self.cACertificateIdentifier = cACertificateIdentifier
            self.cloudwatchLogsExportConfiguration = cloudwatchLogsExportConfiguration
            self.copyTagsToSnapshot = copyTagsToSnapshot
            self.dBInstanceClass = dBInstanceClass
            self.dBInstanceIdentifier = dBInstanceIdentifier
            self.dBParameterGroupName = dBParameterGroupName
            self.dBPortNumber = dBPortNumber
            self.dBSecurityGroups = dBSecurityGroups
            self.dBSubnetGroupName = dBSubnetGroupName
            self.deletionProtection = deletionProtection
            self.domain = domain
            self.domainIAMRoleName = domainIAMRoleName
            self.enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication
            self.enablePerformanceInsights = enablePerformanceInsights
            self.engineVersion = engineVersion
            self.iops = iops
            self.licenseModel = licenseModel
            self.masterUserPassword = masterUserPassword
            self.monitoringInterval = monitoringInterval
            self.monitoringRoleArn = monitoringRoleArn
            self.multiAZ = multiAZ
            self.newDBInstanceIdentifier = newDBInstanceIdentifier
            self.optionGroupName = optionGroupName
            self.performanceInsightsKMSKeyId = performanceInsightsKMSKeyId
            self.preferredBackupWindow = preferredBackupWindow
            self.preferredMaintenanceWindow = preferredMaintenanceWindow
            self.promotionTier = promotionTier
            self.storageType = storageType
            self.tdeCredentialArn = tdeCredentialArn
            self.tdeCredentialPassword = tdeCredentialPassword
            self.vpcSecurityGroupIds = vpcSecurityGroupIds
        }

        private enum CodingKeys: String, CodingKey {
            case allocatedStorage = "AllocatedStorage"
            case allowMajorVersionUpgrade = "AllowMajorVersionUpgrade"
            case applyImmediately = "ApplyImmediately"
            case autoMinorVersionUpgrade = "AutoMinorVersionUpgrade"
            case backupRetentionPeriod = "BackupRetentionPeriod"
            case cACertificateIdentifier = "CACertificateIdentifier"
            case cloudwatchLogsExportConfiguration = "CloudwatchLogsExportConfiguration"
            case copyTagsToSnapshot = "CopyTagsToSnapshot"
            case dBInstanceClass = "DBInstanceClass"
            case dBInstanceIdentifier = "DBInstanceIdentifier"
            case dBParameterGroupName = "DBParameterGroupName"
            case dBPortNumber = "DBPortNumber"
            case dBSecurityGroups = "DBSecurityGroups"
            case dBSubnetGroupName = "DBSubnetGroupName"
            case deletionProtection = "DeletionProtection"
            case domain = "Domain"
            case domainIAMRoleName = "DomainIAMRoleName"
            case enableIAMDatabaseAuthentication = "EnableIAMDatabaseAuthentication"
            case enablePerformanceInsights = "EnablePerformanceInsights"
            case engineVersion = "EngineVersion"
            case iops = "Iops"
            case licenseModel = "LicenseModel"
            case masterUserPassword = "MasterUserPassword"
            case monitoringInterval = "MonitoringInterval"
            case monitoringRoleArn = "MonitoringRoleArn"
            case multiAZ = "MultiAZ"
            case newDBInstanceIdentifier = "NewDBInstanceIdentifier"
            case optionGroupName = "OptionGroupName"
            case performanceInsightsKMSKeyId = "PerformanceInsightsKMSKeyId"
            case preferredBackupWindow = "PreferredBackupWindow"
            case preferredMaintenanceWindow = "PreferredMaintenanceWindow"
            case promotionTier = "PromotionTier"
            case storageType = "StorageType"
            case tdeCredentialArn = "TdeCredentialArn"
            case tdeCredentialPassword = "TdeCredentialPassword"
            case vpcSecurityGroupIds = "VpcSecurityGroupIds"
        }
    }

    public struct ModifyDBInstanceResult: AWSDecodableShape {
        public let dBInstance: DBInstance?

        public init(dBInstance: DBInstance? = nil) {
            self.dBInstance = dBInstance
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstance = "DBInstance"
        }
    }

    public struct ModifyDBParameterGroupMessage: AWSEncodableShape {
        public struct _ParametersEncoding: ArrayCoderProperties { public static let member = "Parameter" }

        /// The name of the DB parameter group. Constraints:   If supplied, must match the name of an existing DBParameterGroup.
        public let dBParameterGroupName: String
        /// An array of parameter names, values, and the apply method for the parameter update. At least one parameter name, value, and apply method must be supplied; subsequent arguments are optional. A maximum of 20 parameters can be modified in a single request. Valid Values (for the application method): immediate | pending-reboot   You can use the immediate value with dynamic parameters only. You can use the pending-reboot value for both dynamic and static parameters, and changes are applied when you reboot the DB instance without failover.
        @CustomCoding<ArrayCoder<_ParametersEncoding, Parameter>>
        public var parameters: [Parameter]

        public init(dBParameterGroupName: String, parameters: [Parameter]) {
            self.dBParameterGroupName = dBParameterGroupName
            self.parameters = parameters
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupName = "DBParameterGroupName"
            case parameters = "Parameters"
        }
    }

    public struct ModifyDBSubnetGroupMessage: AWSEncodableShape {
        public struct _SubnetIdsEncoding: ArrayCoderProperties { public static let member = "SubnetIdentifier" }

        /// The description for the DB subnet group.
        public let dBSubnetGroupDescription: String?
        /// The name for the DB subnet group. This value is stored as a lowercase string. You can't modify the default subnet group. Constraints: Must match the name of an existing DBSubnetGroup. Must not be default. Example: mySubnetgroup
        public let dBSubnetGroupName: String
        /// The EC2 subnet IDs for the DB subnet group.
        @CustomCoding<ArrayCoder<_SubnetIdsEncoding, String>>
        public var subnetIds: [String]

        public init(dBSubnetGroupDescription: String? = nil, dBSubnetGroupName: String, subnetIds: [String]) {
            self.dBSubnetGroupDescription = dBSubnetGroupDescription
            self.dBSubnetGroupName = dBSubnetGroupName
            self.subnetIds = subnetIds
        }

        private enum CodingKeys: String, CodingKey {
            case dBSubnetGroupDescription = "DBSubnetGroupDescription"
            case dBSubnetGroupName = "DBSubnetGroupName"
            case subnetIds = "SubnetIds"
        }
    }

    public struct ModifyDBSubnetGroupResult: AWSDecodableShape {
        public let dBSubnetGroup: DBSubnetGroup?

        public init(dBSubnetGroup: DBSubnetGroup? = nil) {
            self.dBSubnetGroup = dBSubnetGroup
        }

        private enum CodingKeys: String, CodingKey {
            case dBSubnetGroup = "DBSubnetGroup"
        }
    }

    public struct ModifyEventSubscriptionMessage: AWSEncodableShape {
        public struct _EventCategoriesEncoding: ArrayCoderProperties { public static let member = "EventCategory" }

        ///  A Boolean value; set to true to activate the subscription.
        public let enabled: Bool?
        ///  A list of event categories for a SourceType that you want to subscribe to. You can see a list of the categories for a given SourceType by using the DescribeEventCategories action.
        @OptionalCustomCoding<ArrayCoder<_EventCategoriesEncoding, String>>
        public var eventCategories: [String]?
        /// The Amazon Resource Name (ARN) of the SNS topic created for event notification. The ARN is created by Amazon SNS when you create a topic and subscribe to it.
        public let snsTopicArn: String?
        /// The type of source that is generating the events. For example, if you want to be notified of events generated by a DB instance, you would set this parameter to db-instance. if this value is not specified, all events are returned. Valid values: db-instance | db-parameter-group | db-security-group | db-snapshot
        public let sourceType: String?
        /// The name of the event notification subscription.
        public let subscriptionName: String

        public init(enabled: Bool? = nil, eventCategories: [String]? = nil, snsTopicArn: String? = nil, sourceType: String? = nil, subscriptionName: String) {
            self.enabled = enabled
            self.eventCategories = eventCategories
            self.snsTopicArn = snsTopicArn
            self.sourceType = sourceType
            self.subscriptionName = subscriptionName
        }

        private enum CodingKeys: String, CodingKey {
            case enabled = "Enabled"
            case eventCategories = "EventCategories"
            case snsTopicArn = "SnsTopicArn"
            case sourceType = "SourceType"
            case subscriptionName = "SubscriptionName"
        }
    }

    public struct ModifyEventSubscriptionResult: AWSDecodableShape {
        public let eventSubscription: EventSubscription?

        public init(eventSubscription: EventSubscription? = nil) {
            self.eventSubscription = eventSubscription
        }

        private enum CodingKeys: String, CodingKey {
            case eventSubscription = "EventSubscription"
        }
    }

    public struct OptionGroupMembership: AWSDecodableShape {
        /// The name of the option group that the instance belongs to.
        public let optionGroupName: String?
        /// The status of the DB instance's option group membership. Valid values are: in-sync, pending-apply, pending-removal, pending-maintenance-apply, pending-maintenance-removal, applying, removing, and failed.
        public let status: String?

        public init(optionGroupName: String? = nil, status: String? = nil) {
            self.optionGroupName = optionGroupName
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case optionGroupName = "OptionGroupName"
            case status = "Status"
        }
    }

    public struct OrderableDBInstanceOption: AWSDecodableShape {
        public struct _AvailabilityZonesEncoding: ArrayCoderProperties { public static let member = "AvailabilityZone" }

        /// A list of Availability Zones for a DB instance.
        @OptionalCustomCoding<ArrayCoder<_AvailabilityZonesEncoding, AvailabilityZone>>
        public var availabilityZones: [AvailabilityZone]?
        /// The DB instance class for a DB instance.
        public let dBInstanceClass: String?
        /// The engine type of a DB instance.
        public let engine: String?
        /// The engine version of a DB instance.
        public let engineVersion: String?
        /// The license model for a DB instance.
        public let licenseModel: String?
        /// Maximum total provisioned IOPS for a DB instance.
        public let maxIopsPerDbInstance: Int?
        /// Maximum provisioned IOPS per GiB for a DB instance.
        public let maxIopsPerGib: Double?
        /// Maximum storage size for a DB instance.
        public let maxStorageSize: Int?
        /// Minimum total provisioned IOPS for a DB instance.
        public let minIopsPerDbInstance: Int?
        /// Minimum provisioned IOPS per GiB for a DB instance.
        public let minIopsPerGib: Double?
        /// Minimum storage size for a DB instance.
        public let minStorageSize: Int?
        /// Indicates whether a DB instance is Multi-AZ capable.
        public let multiAZCapable: Bool?
        /// Indicates whether a DB instance can have a Read Replica.
        public let readReplicaCapable: Bool?
        /// Indicates the storage type for a DB instance.
        public let storageType: String?
        /// Indicates whether a DB instance supports Enhanced Monitoring at intervals from 1 to 60 seconds.
        public let supportsEnhancedMonitoring: Bool?
        /// Indicates whether a DB instance supports IAM database authentication.
        public let supportsIAMDatabaseAuthentication: Bool?
        /// Indicates whether a DB instance supports provisioned IOPS.
        public let supportsIops: Bool?
        ///  (Not supported by Neptune)
        public let supportsPerformanceInsights: Bool?
        /// Indicates whether a DB instance supports encrypted storage.
        public let supportsStorageEncryption: Bool?
        /// Indicates whether a DB instance is in a VPC.
        public let vpc: Bool?

        public init(availabilityZones: [AvailabilityZone]? = nil, dBInstanceClass: String? = nil, engine: String? = nil, engineVersion: String? = nil, licenseModel: String? = nil, maxIopsPerDbInstance: Int? = nil, maxIopsPerGib: Double? = nil, maxStorageSize: Int? = nil, minIopsPerDbInstance: Int? = nil, minIopsPerGib: Double? = nil, minStorageSize: Int? = nil, multiAZCapable: Bool? = nil, readReplicaCapable: Bool? = nil, storageType: String? = nil, supportsEnhancedMonitoring: Bool? = nil, supportsIAMDatabaseAuthentication: Bool? = nil, supportsIops: Bool? = nil, supportsPerformanceInsights: Bool? = nil, supportsStorageEncryption: Bool? = nil, vpc: Bool? = nil) {
            self.availabilityZones = availabilityZones
            self.dBInstanceClass = dBInstanceClass
            self.engine = engine
            self.engineVersion = engineVersion
            self.licenseModel = licenseModel
            self.maxIopsPerDbInstance = maxIopsPerDbInstance
            self.maxIopsPerGib = maxIopsPerGib
            self.maxStorageSize = maxStorageSize
            self.minIopsPerDbInstance = minIopsPerDbInstance
            self.minIopsPerGib = minIopsPerGib
            self.minStorageSize = minStorageSize
            self.multiAZCapable = multiAZCapable
            self.readReplicaCapable = readReplicaCapable
            self.storageType = storageType
            self.supportsEnhancedMonitoring = supportsEnhancedMonitoring
            self.supportsIAMDatabaseAuthentication = supportsIAMDatabaseAuthentication
            self.supportsIops = supportsIops
            self.supportsPerformanceInsights = supportsPerformanceInsights
            self.supportsStorageEncryption = supportsStorageEncryption
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case availabilityZones = "AvailabilityZones"
            case dBInstanceClass = "DBInstanceClass"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case licenseModel = "LicenseModel"
            case maxIopsPerDbInstance = "MaxIopsPerDbInstance"
            case maxIopsPerGib = "MaxIopsPerGib"
            case maxStorageSize = "MaxStorageSize"
            case minIopsPerDbInstance = "MinIopsPerDbInstance"
            case minIopsPerGib = "MinIopsPerGib"
            case minStorageSize = "MinStorageSize"
            case multiAZCapable = "MultiAZCapable"
            case readReplicaCapable = "ReadReplicaCapable"
            case storageType = "StorageType"
            case supportsEnhancedMonitoring = "SupportsEnhancedMonitoring"
            case supportsIAMDatabaseAuthentication = "SupportsIAMDatabaseAuthentication"
            case supportsIops = "SupportsIops"
            case supportsPerformanceInsights = "SupportsPerformanceInsights"
            case supportsStorageEncryption = "SupportsStorageEncryption"
            case vpc = "Vpc"
        }
    }

    public struct OrderableDBInstanceOptionsMessage: AWSDecodableShape {
        public struct _OrderableDBInstanceOptionsEncoding: ArrayCoderProperties { public static let member = "OrderableDBInstanceOption" }

        ///  An optional pagination token provided by a previous OrderableDBInstanceOptions request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords .
        public let marker: String?
        /// An OrderableDBInstanceOption structure containing information about orderable options for the DB instance.
        @OptionalCustomCoding<ArrayCoder<_OrderableDBInstanceOptionsEncoding, OrderableDBInstanceOption>>
        public var orderableDBInstanceOptions: [OrderableDBInstanceOption]?

        public init(marker: String? = nil, orderableDBInstanceOptions: [OrderableDBInstanceOption]? = nil) {
            self.marker = marker
            self.orderableDBInstanceOptions = orderableDBInstanceOptions
        }

        private enum CodingKeys: String, CodingKey {
            case marker = "Marker"
            case orderableDBInstanceOptions = "OrderableDBInstanceOptions"
        }
    }

    public struct Parameter: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the valid range of values for the parameter.
        public let allowedValues: String?
        /// Indicates when to apply parameter updates.
        public let applyMethod: ApplyMethod?
        /// Specifies the engine specific parameters type.
        public let applyType: String?
        /// Specifies the valid data type for the parameter.
        public let dataType: String?
        /// Provides a description of the parameter.
        public let description: String?
        ///  Indicates whether (true) or not (false) the parameter can be modified. Some parameters have security or operational implications that prevent them from being changed.
        public let isModifiable: Bool?
        /// The earliest engine version to which the parameter can apply.
        public let minimumEngineVersion: String?
        /// Specifies the name of the parameter.
        public let parameterName: String?
        /// Specifies the value of the parameter.
        public let parameterValue: String?
        /// Indicates the source of the parameter value.
        public let source: String?

        public init(allowedValues: String? = nil, applyMethod: ApplyMethod? = nil, applyType: String? = nil, dataType: String? = nil, description: String? = nil, isModifiable: Bool? = nil, minimumEngineVersion: String? = nil, parameterName: String? = nil, parameterValue: String? = nil, source: String? = nil) {
            self.allowedValues = allowedValues
            self.applyMethod = applyMethod
            self.applyType = applyType
            self.dataType = dataType
            self.description = description
            self.isModifiable = isModifiable
            self.minimumEngineVersion = minimumEngineVersion
            self.parameterName = parameterName
            self.parameterValue = parameterValue
            self.source = source
        }

        private enum CodingKeys: String, CodingKey {
            case allowedValues = "AllowedValues"
            case applyMethod = "ApplyMethod"
            case applyType = "ApplyType"
            case dataType = "DataType"
            case description = "Description"
            case isModifiable = "IsModifiable"
            case minimumEngineVersion = "MinimumEngineVersion"
            case parameterName = "ParameterName"
            case parameterValue = "ParameterValue"
            case source = "Source"
        }
    }

    public struct PendingCloudwatchLogsExports: AWSDecodableShape {
        /// Log types that are in the process of being enabled. After they are enabled, these log types are exported to CloudWatch Logs.
        @OptionalCustomCoding<StandardArrayCoder>
        public var logTypesToDisable: [String]?
        /// Log types that are in the process of being deactivated. After they are deactivated, these log types aren't exported to CloudWatch Logs.
        @OptionalCustomCoding<StandardArrayCoder>
        public var logTypesToEnable: [String]?

        public init(logTypesToDisable: [String]? = nil, logTypesToEnable: [String]? = nil) {
            self.logTypesToDisable = logTypesToDisable
            self.logTypesToEnable = logTypesToEnable
        }

        private enum CodingKeys: String, CodingKey {
            case logTypesToDisable = "LogTypesToDisable"
            case logTypesToEnable = "LogTypesToEnable"
        }
    }

    public struct PendingMaintenanceAction: AWSDecodableShape {
        /// The type of pending maintenance action that is available for the resource.
        public let action: String?
        /// The date of the maintenance window when the action is applied. The maintenance action is applied to the resource during its first maintenance window after this date. If this date is specified, any next-maintenance opt-in requests are ignored.
        public let autoAppliedAfterDate: Date?
        /// The effective date when the pending maintenance action is applied to the resource. This date takes into account opt-in requests received from the ApplyPendingMaintenanceAction API, the AutoAppliedAfterDate, and the ForcedApplyDate. This value is blank if an opt-in request has not been received and nothing has been specified as AutoAppliedAfterDate or ForcedApplyDate.
        public let currentApplyDate: Date?
        /// A description providing more detail about the maintenance action.
        public let description: String?
        /// The date when the maintenance action is automatically applied. The maintenance action is applied to the resource on this date regardless of the maintenance window for the resource. If this date is specified, any immediate opt-in requests are ignored.
        public let forcedApplyDate: Date?
        /// Indicates the type of opt-in request that has been received for the resource.
        public let optInStatus: String?

        public init(action: String? = nil, autoAppliedAfterDate: Date? = nil, currentApplyDate: Date? = nil, description: String? = nil, forcedApplyDate: Date? = nil, optInStatus: String? = nil) {
            self.action = action
            self.autoAppliedAfterDate = autoAppliedAfterDate
            self.currentApplyDate = currentApplyDate
            self.description = description
            self.forcedApplyDate = forcedApplyDate
            self.optInStatus = optInStatus
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case autoAppliedAfterDate = "AutoAppliedAfterDate"
            case currentApplyDate = "CurrentApplyDate"
            case description = "Description"
            case forcedApplyDate = "ForcedApplyDate"
            case optInStatus = "OptInStatus"
        }
    }

    public struct PendingMaintenanceActionsMessage: AWSDecodableShape {
        public struct _PendingMaintenanceActionsEncoding: ArrayCoderProperties { public static let member = "ResourcePendingMaintenanceActions" }

        ///  An optional pagination token provided by a previous DescribePendingMaintenanceActions request. If this parameter is specified, the response includes only records beyond the marker, up to a number of records specified by MaxRecords.
        public let marker: String?
        /// A list of the pending maintenance actions for the resource.
        @OptionalCustomCoding<ArrayCoder<_PendingMaintenanceActionsEncoding, ResourcePendingMaintenanceActions>>
        public var pendingMaintenanceActions: [ResourcePendingMaintenanceActions]?

        public init(marker: String? = nil, pendingMaintenanceActions: [ResourcePendingMaintenanceActions]? = nil) {
            self.marker = marker
            self.pendingMaintenanceActions = pendingMaintenanceActions
        }

        private enum CodingKeys: String, CodingKey {
            case marker = "Marker"
            case pendingMaintenanceActions = "PendingMaintenanceActions"
        }
    }

    public struct PendingModifiedValues: AWSDecodableShape {
        ///  Contains the new AllocatedStorage size for the DB instance that will be applied or is currently being applied.
        public let allocatedStorage: Int?
        /// Specifies the pending number of days for which automated backups are retained.
        public let backupRetentionPeriod: Int?
        /// Specifies the identifier of the CA certificate for the DB instance.
        public let cACertificateIdentifier: String?
        ///  Contains the new DBInstanceClass for the DB instance that will be applied or is currently being applied.
        public let dBInstanceClass: String?
        ///  Contains the new DBInstanceIdentifier for the DB instance that will be applied or is currently being applied.
        public let dBInstanceIdentifier: String?
        /// The new DB subnet group for the DB instance.
        public let dBSubnetGroupName: String?
        /// Indicates the database engine version.
        public let engineVersion: String?
        /// Specifies the new Provisioned IOPS value for the DB instance that will be applied or is currently being applied.
        public let iops: Int?
        /// The license model for the DB instance. Valid values: license-included | bring-your-own-license | general-public-license
        public let licenseModel: String?
        /// Contains the pending or currently-in-progress change of the master credentials for the DB instance.
        public let masterUserPassword: String?
        /// Indicates that the Single-AZ DB instance is to change to a Multi-AZ deployment.
        public let multiAZ: Bool?
        /// This PendingCloudwatchLogsExports structure specifies pending changes to which CloudWatch logs are enabled and which are disabled.
        public let pendingCloudwatchLogsExports: PendingCloudwatchLogsExports?
        /// Specifies the pending port for the DB instance.
        public let port: Int?
        /// Specifies the storage type to be associated with the DB instance.
        public let storageType: String?

        public init(allocatedStorage: Int? = nil, backupRetentionPeriod: Int? = nil, cACertificateIdentifier: String? = nil, dBInstanceClass: String? = nil, dBInstanceIdentifier: String? = nil, dBSubnetGroupName: String? = nil, engineVersion: String? = nil, iops: Int? = nil, licenseModel: String? = nil, masterUserPassword: String? = nil, multiAZ: Bool? = nil, pendingCloudwatchLogsExports: PendingCloudwatchLogsExports? = nil, port: Int? = nil, storageType: String? = nil) {
            self.allocatedStorage = allocatedStorage
            self.backupRetentionPeriod = backupRetentionPeriod
            self.cACertificateIdentifier = cACertificateIdentifier
            self.dBInstanceClass = dBInstanceClass
            self.dBInstanceIdentifier = dBInstanceIdentifier
            self.dBSubnetGroupName = dBSubnetGroupName
            self.engineVersion = engineVersion
            self.iops = iops
            self.licenseModel = licenseModel
            self.masterUserPassword = masterUserPassword
            self.multiAZ = multiAZ
            self.pendingCloudwatchLogsExports = pendingCloudwatchLogsExports
            self.port = port
            self.storageType = storageType
        }

        private enum CodingKeys: String, CodingKey {
            case allocatedStorage = "AllocatedStorage"
            case backupRetentionPeriod = "BackupRetentionPeriod"
            case cACertificateIdentifier = "CACertificateIdentifier"
            case dBInstanceClass = "DBInstanceClass"
            case dBInstanceIdentifier = "DBInstanceIdentifier"
            case dBSubnetGroupName = "DBSubnetGroupName"
            case engineVersion = "EngineVersion"
            case iops = "Iops"
            case licenseModel = "LicenseModel"
            case masterUserPassword = "MasterUserPassword"
            case multiAZ = "MultiAZ"
            case pendingCloudwatchLogsExports = "PendingCloudwatchLogsExports"
            case port = "Port"
            case storageType = "StorageType"
        }
    }

    public struct PromoteReadReplicaDBClusterMessage: AWSEncodableShape {
        /// Not supported.
        public let dBClusterIdentifier: String

        public init(dBClusterIdentifier: String) {
            self.dBClusterIdentifier = dBClusterIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
        }
    }

    public struct PromoteReadReplicaDBClusterResult: AWSDecodableShape {
        public let dBCluster: DBCluster?

        public init(dBCluster: DBCluster? = nil) {
            self.dBCluster = dBCluster
        }

        private enum CodingKeys: String, CodingKey {
            case dBCluster = "DBCluster"
        }
    }

    public struct Range: AWSDecodableShape {
        /// The minimum value in the range.
        public let from: Int?
        /// The step value for the range. For example, if you have a range of 5,000 to 10,000, with a step value of 1,000, the valid values start at 5,000 and step up by 1,000. Even though 7,500 is within the range, it isn't a valid value for the range. The valid values are 5,000, 6,000, 7,000, 8,000...
        public let step: Int?
        /// The maximum value in the range.
        public let to: Int?

        public init(from: Int? = nil, step: Int? = nil, to: Int? = nil) {
            self.from = from
            self.step = step
            self.to = to
        }

        private enum CodingKeys: String, CodingKey {
            case from = "From"
            case step = "Step"
            case to = "To"
        }
    }

    public struct RebootDBInstanceMessage: AWSEncodableShape {
        /// The DB instance identifier. This parameter is stored as a lowercase string. Constraints:   Must match the identifier of an existing DBInstance.
        public let dBInstanceIdentifier: String
        ///  When true, the reboot is conducted through a MultiAZ failover. Constraint: You can't specify true if the instance is not configured for MultiAZ.
        public let forceFailover: Bool?

        public init(dBInstanceIdentifier: String, forceFailover: Bool? = nil) {
            self.dBInstanceIdentifier = dBInstanceIdentifier
            self.forceFailover = forceFailover
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstanceIdentifier = "DBInstanceIdentifier"
            case forceFailover = "ForceFailover"
        }
    }

    public struct RebootDBInstanceResult: AWSDecodableShape {
        public let dBInstance: DBInstance?

        public init(dBInstance: DBInstance? = nil) {
            self.dBInstance = dBInstance
        }

        private enum CodingKeys: String, CodingKey {
            case dBInstance = "DBInstance"
        }
    }

    public struct RemoveRoleFromDBClusterMessage: AWSEncodableShape {
        /// The name of the DB cluster to disassociate the IAM role from.
        public let dBClusterIdentifier: String
        /// The name of the feature for the DB cluster that the IAM role is to be disassociated from. For the list of supported feature names, see DBEngineVersion.
        public let featureName: String?
        /// The Amazon Resource Name (ARN) of the IAM role to disassociate from the DB cluster, for example arn:aws:iam::123456789012:role/NeptuneAccessRole.
        public let roleArn: String

        public init(dBClusterIdentifier: String, featureName: String? = nil, roleArn: String) {
            self.dBClusterIdentifier = dBClusterIdentifier
            self.featureName = featureName
            self.roleArn = roleArn
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
            case featureName = "FeatureName"
            case roleArn = "RoleArn"
        }
    }

    public struct RemoveSourceIdentifierFromSubscriptionMessage: AWSEncodableShape {
        ///  The source identifier to be removed from the subscription, such as the DB instance identifier for a DB instance or the name of a security group.
        public let sourceIdentifier: String
        /// The name of the event notification subscription you want to remove a source identifier from.
        public let subscriptionName: String

        public init(sourceIdentifier: String, subscriptionName: String) {
            self.sourceIdentifier = sourceIdentifier
            self.subscriptionName = subscriptionName
        }

        private enum CodingKeys: String, CodingKey {
            case sourceIdentifier = "SourceIdentifier"
            case subscriptionName = "SubscriptionName"
        }
    }

    public struct RemoveSourceIdentifierFromSubscriptionResult: AWSDecodableShape {
        public let eventSubscription: EventSubscription?

        public init(eventSubscription: EventSubscription? = nil) {
            self.eventSubscription = eventSubscription
        }

        private enum CodingKeys: String, CodingKey {
            case eventSubscription = "EventSubscription"
        }
    }

    public struct RemoveTagsFromResourceMessage: AWSEncodableShape {
        /// The Amazon Neptune resource that the tags are removed from. This value is an Amazon Resource Name (ARN). For information about creating an ARN, see  Constructing an Amazon Resource Name (ARN).
        public let resourceName: String
        /// The tag key (name) of the tag to be removed.
        @CustomCoding<StandardArrayCoder>
        public var tagKeys: [String]

        public init(resourceName: String, tagKeys: [String]) {
            self.resourceName = resourceName
            self.tagKeys = tagKeys
        }

        private enum CodingKeys: String, CodingKey {
            case resourceName = "ResourceName"
            case tagKeys = "TagKeys"
        }
    }

    public struct ResetDBClusterParameterGroupMessage: AWSEncodableShape {
        public struct _ParametersEncoding: ArrayCoderProperties { public static let member = "Parameter" }

        /// The name of the DB cluster parameter group to reset.
        public let dBClusterParameterGroupName: String
        /// A list of parameter names in the DB cluster parameter group to reset to the default values. You can't use this parameter if the ResetAllParameters parameter is set to true.
        @OptionalCustomCoding<ArrayCoder<_ParametersEncoding, Parameter>>
        public var parameters: [Parameter]?
        /// A value that is set to true to reset all parameters in the DB cluster parameter group to their default values, and false otherwise. You can't use this parameter if there is a list of parameter names specified for the Parameters parameter.
        public let resetAllParameters: Bool?

        public init(dBClusterParameterGroupName: String, parameters: [Parameter]? = nil, resetAllParameters: Bool? = nil) {
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.parameters = parameters
            self.resetAllParameters = resetAllParameters
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case parameters = "Parameters"
            case resetAllParameters = "ResetAllParameters"
        }
    }

    public struct ResetDBParameterGroupMessage: AWSEncodableShape {
        public struct _ParametersEncoding: ArrayCoderProperties { public static let member = "Parameter" }

        /// The name of the DB parameter group. Constraints:   Must match the name of an existing DBParameterGroup.
        public let dBParameterGroupName: String
        /// To reset the entire DB parameter group, specify the DBParameterGroup name and ResetAllParameters parameters. To reset specific parameters, provide a list of the following: ParameterName and ApplyMethod. A maximum of 20 parameters can be modified in a single request. Valid Values (for Apply method): pending-reboot
        @OptionalCustomCoding<ArrayCoder<_ParametersEncoding, Parameter>>
        public var parameters: [Parameter]?
        /// Specifies whether (true) or not (false) to reset all parameters in the DB parameter group to default values. Default: true
        public let resetAllParameters: Bool?

        public init(dBParameterGroupName: String, parameters: [Parameter]? = nil, resetAllParameters: Bool? = nil) {
            self.dBParameterGroupName = dBParameterGroupName
            self.parameters = parameters
            self.resetAllParameters = resetAllParameters
        }

        private enum CodingKeys: String, CodingKey {
            case dBParameterGroupName = "DBParameterGroupName"
            case parameters = "Parameters"
            case resetAllParameters = "ResetAllParameters"
        }
    }

    public struct ResourcePendingMaintenanceActions: AWSDecodableShape {
        public struct _PendingMaintenanceActionDetailsEncoding: ArrayCoderProperties { public static let member = "PendingMaintenanceAction" }

        /// A list that provides details about the pending maintenance actions for the resource.
        @OptionalCustomCoding<ArrayCoder<_PendingMaintenanceActionDetailsEncoding, PendingMaintenanceAction>>
        public var pendingMaintenanceActionDetails: [PendingMaintenanceAction]?
        /// The ARN of the resource that has pending maintenance actions.
        public let resourceIdentifier: String?

        public init(pendingMaintenanceActionDetails: [PendingMaintenanceAction]? = nil, resourceIdentifier: String? = nil) {
            self.pendingMaintenanceActionDetails = pendingMaintenanceActionDetails
            self.resourceIdentifier = resourceIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case pendingMaintenanceActionDetails = "PendingMaintenanceActionDetails"
            case resourceIdentifier = "ResourceIdentifier"
        }
    }

    public struct RestoreDBClusterFromSnapshotMessage: AWSEncodableShape {
        public struct _AvailabilityZonesEncoding: ArrayCoderProperties { public static let member = "AvailabilityZone" }
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }
        public struct _VpcSecurityGroupIdsEncoding: ArrayCoderProperties { public static let member = "VpcSecurityGroupId" }

        /// Provides the list of EC2 Availability Zones that instances in the restored DB cluster can be created in.
        @OptionalCustomCoding<ArrayCoder<_AvailabilityZonesEncoding, String>>
        public var availabilityZones: [String]?
        /// Not supported.
        public let databaseName: String?
        /// The name of the DB cluster to create from the DB snapshot or DB cluster snapshot. This parameter isn't case-sensitive. Constraints:   Must contain from 1 to 63 letters, numbers, or hyphens   First character must be a letter   Cannot end with a hyphen or contain two consecutive hyphens   Example: my-snapshot-id
        public let dBClusterIdentifier: String
        /// The name of the DB cluster parameter group to associate with the new DB cluster. Constraints:   If supplied, must match the name of an existing DBClusterParameterGroup.
        public let dBClusterParameterGroupName: String?
        /// The name of the DB subnet group to use for the new DB cluster. Constraints: If supplied, must match the name of an existing DBSubnetGroup. Example: mySubnetgroup
        public let dBSubnetGroupName: String?
        /// A value that indicates whether the DB cluster has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection is disabled.
        public let deletionProtection: Bool?
        /// The list of logs that the restored DB cluster is to export to Amazon CloudWatch Logs.
        @OptionalCustomCoding<StandardArrayCoder>
        public var enableCloudwatchLogsExports: [String]?
        /// True to enable mapping of AWS Identity and Access Management (IAM) accounts to database accounts, and otherwise false. Default: false
        public let enableIAMDatabaseAuthentication: Bool?
        /// The database engine to use for the new DB cluster. Default: The same as source Constraint: Must be compatible with the engine of the source
        public let engine: String
        /// The version of the database engine to use for the new DB cluster.
        public let engineVersion: String?
        /// The AWS KMS key identifier to use when restoring an encrypted DB cluster from a DB snapshot or DB cluster snapshot. The KMS key identifier is the Amazon Resource Name (ARN) for the KMS encryption key. If you are restoring a DB cluster with the same AWS account that owns the KMS encryption key used to encrypt the new DB cluster, then you can use the KMS key alias instead of the ARN for the KMS encryption key. If you do not specify a value for the KmsKeyId parameter, then the following will occur:   If the DB snapshot or DB cluster snapshot in SnapshotIdentifier is encrypted, then the restored DB cluster is encrypted using the KMS key that was used to encrypt the DB snapshot or DB cluster snapshot.   If the DB snapshot or DB cluster snapshot in SnapshotIdentifier is not encrypted, then the restored DB cluster is not encrypted.
        public let kmsKeyId: String?
        ///  (Not supported by Neptune)
        public let optionGroupName: String?
        /// The port number on which the new DB cluster accepts connections. Constraints: Value must be 1150-65535  Default: The same port as the original DB cluster.
        public let port: Int?
        /// The identifier for the DB snapshot or DB cluster snapshot to restore from. You can use either the name or the Amazon Resource Name (ARN) to specify a DB cluster snapshot. However, you can use only the ARN to specify a DB snapshot. Constraints:   Must match the identifier of an existing Snapshot.
        public let snapshotIdentifier: String
        /// The tags to be assigned to the restored DB cluster.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?
        /// A list of VPC security groups that the new DB cluster will belong to.
        @OptionalCustomCoding<ArrayCoder<_VpcSecurityGroupIdsEncoding, String>>
        public var vpcSecurityGroupIds: [String]?

        public init(availabilityZones: [String]? = nil, databaseName: String? = nil, dBClusterIdentifier: String, dBClusterParameterGroupName: String? = nil, dBSubnetGroupName: String? = nil, deletionProtection: Bool? = nil, enableCloudwatchLogsExports: [String]? = nil, enableIAMDatabaseAuthentication: Bool? = nil, engine: String, engineVersion: String? = nil, kmsKeyId: String? = nil, optionGroupName: String? = nil, port: Int? = nil, snapshotIdentifier: String, tags: [Tag]? = nil, vpcSecurityGroupIds: [String]? = nil) {
            self.availabilityZones = availabilityZones
            self.databaseName = databaseName
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.dBSubnetGroupName = dBSubnetGroupName
            self.deletionProtection = deletionProtection
            self.enableCloudwatchLogsExports = enableCloudwatchLogsExports
            self.enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication
            self.engine = engine
            self.engineVersion = engineVersion
            self.kmsKeyId = kmsKeyId
            self.optionGroupName = optionGroupName
            self.port = port
            self.snapshotIdentifier = snapshotIdentifier
            self.tags = tags
            self.vpcSecurityGroupIds = vpcSecurityGroupIds
        }

        private enum CodingKeys: String, CodingKey {
            case availabilityZones = "AvailabilityZones"
            case databaseName = "DatabaseName"
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case dBSubnetGroupName = "DBSubnetGroupName"
            case deletionProtection = "DeletionProtection"
            case enableCloudwatchLogsExports = "EnableCloudwatchLogsExports"
            case enableIAMDatabaseAuthentication = "EnableIAMDatabaseAuthentication"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case kmsKeyId = "KmsKeyId"
            case optionGroupName = "OptionGroupName"
            case port = "Port"
            case snapshotIdentifier = "SnapshotIdentifier"
            case tags = "Tags"
            case vpcSecurityGroupIds = "VpcSecurityGroupIds"
        }
    }

    public struct RestoreDBClusterFromSnapshotResult: AWSDecodableShape {
        public let dBCluster: DBCluster?

        public init(dBCluster: DBCluster? = nil) {
            self.dBCluster = dBCluster
        }

        private enum CodingKeys: String, CodingKey {
            case dBCluster = "DBCluster"
        }
    }

    public struct RestoreDBClusterToPointInTimeMessage: AWSEncodableShape {
        public struct _TagsEncoding: ArrayCoderProperties { public static let member = "Tag" }
        public struct _VpcSecurityGroupIdsEncoding: ArrayCoderProperties { public static let member = "VpcSecurityGroupId" }

        /// The name of the new DB cluster to be created. Constraints:   Must contain from 1 to 63 letters, numbers, or hyphens   First character must be a letter   Cannot end with a hyphen or contain two consecutive hyphens
        public let dBClusterIdentifier: String
        /// The name of the DB cluster parameter group to associate with the new DB cluster. Constraints:   If supplied, must match the name of an existing DBClusterParameterGroup.
        public let dBClusterParameterGroupName: String?
        /// The DB subnet group name to use for the new DB cluster. Constraints: If supplied, must match the name of an existing DBSubnetGroup. Example: mySubnetgroup
        public let dBSubnetGroupName: String?
        /// A value that indicates whether the DB cluster has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection is disabled.
        public let deletionProtection: Bool?
        /// The list of logs that the restored DB cluster is to export to CloudWatch Logs.
        @OptionalCustomCoding<StandardArrayCoder>
        public var enableCloudwatchLogsExports: [String]?
        /// True to enable mapping of AWS Identity and Access Management (IAM) accounts to database accounts, and otherwise false. Default: false
        public let enableIAMDatabaseAuthentication: Bool?
        /// The AWS KMS key identifier to use when restoring an encrypted DB cluster from an encrypted DB cluster. The KMS key identifier is the Amazon Resource Name (ARN) for the KMS encryption key. If you are restoring a DB cluster with the same AWS account that owns the KMS encryption key used to encrypt the new DB cluster, then you can use the KMS key alias instead of the ARN for the KMS encryption key. You can restore to a new DB cluster and encrypt the new DB cluster with a KMS key that is different than the KMS key used to encrypt the source DB cluster. The new DB cluster is encrypted with the KMS key identified by the KmsKeyId parameter. If you do not specify a value for the KmsKeyId parameter, then the following will occur:   If the DB cluster is encrypted, then the restored DB cluster is encrypted using the KMS key that was used to encrypt the source DB cluster.   If the DB cluster is not encrypted, then the restored DB cluster is not encrypted.   If DBClusterIdentifier refers to a DB cluster that is not encrypted, then the restore request is rejected.
        public let kmsKeyId: String?
        ///  (Not supported by Neptune)
        public let optionGroupName: String?
        /// The port number on which the new DB cluster accepts connections. Constraints: Value must be 1150-65535  Default: The same port as the original DB cluster.
        public let port: Int?
        /// The date and time to restore the DB cluster to. Valid Values: Value must be a time in Universal Coordinated Time (UTC) format Constraints:   Must be before the latest restorable time for the DB instance   Must be specified if UseLatestRestorableTime parameter is not provided   Cannot be specified if UseLatestRestorableTime parameter is true   Cannot be specified if RestoreType parameter is copy-on-write    Example: 2015-03-07T23:45:00Z
        public let restoreToTime: Date?
        /// The type of restore to be performed. You can specify one of the following values:    full-copy - The new DB cluster is restored as a full copy of the source DB cluster.    copy-on-write - The new DB cluster is restored as a clone of the source DB cluster.   If you don't specify a RestoreType value, then the new DB cluster is restored as a full copy of the source DB cluster.
        public let restoreType: String?
        /// The identifier of the source DB cluster from which to restore. Constraints:   Must match the identifier of an existing DBCluster.
        public let sourceDBClusterIdentifier: String
        /// The tags to be applied to the restored DB cluster.
        @OptionalCustomCoding<ArrayCoder<_TagsEncoding, Tag>>
        public var tags: [Tag]?
        /// A value that is set to true to restore the DB cluster to the latest restorable backup time, and false otherwise. Default: false  Constraints: Cannot be specified if RestoreToTime parameter is provided.
        public let useLatestRestorableTime: Bool?
        /// A list of VPC security groups that the new DB cluster belongs to.
        @OptionalCustomCoding<ArrayCoder<_VpcSecurityGroupIdsEncoding, String>>
        public var vpcSecurityGroupIds: [String]?

        public init(dBClusterIdentifier: String, dBClusterParameterGroupName: String? = nil, dBSubnetGroupName: String? = nil, deletionProtection: Bool? = nil, enableCloudwatchLogsExports: [String]? = nil, enableIAMDatabaseAuthentication: Bool? = nil, kmsKeyId: String? = nil, optionGroupName: String? = nil, port: Int? = nil, restoreToTime: Date? = nil, restoreType: String? = nil, sourceDBClusterIdentifier: String, tags: [Tag]? = nil, useLatestRestorableTime: Bool? = nil, vpcSecurityGroupIds: [String]? = nil) {
            self.dBClusterIdentifier = dBClusterIdentifier
            self.dBClusterParameterGroupName = dBClusterParameterGroupName
            self.dBSubnetGroupName = dBSubnetGroupName
            self.deletionProtection = deletionProtection
            self.enableCloudwatchLogsExports = enableCloudwatchLogsExports
            self.enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication
            self.kmsKeyId = kmsKeyId
            self.optionGroupName = optionGroupName
            self.port = port
            self.restoreToTime = restoreToTime
            self.restoreType = restoreType
            self.sourceDBClusterIdentifier = sourceDBClusterIdentifier
            self.tags = tags
            self.useLatestRestorableTime = useLatestRestorableTime
            self.vpcSecurityGroupIds = vpcSecurityGroupIds
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
            case dBClusterParameterGroupName = "DBClusterParameterGroupName"
            case dBSubnetGroupName = "DBSubnetGroupName"
            case deletionProtection = "DeletionProtection"
            case enableCloudwatchLogsExports = "EnableCloudwatchLogsExports"
            case enableIAMDatabaseAuthentication = "EnableIAMDatabaseAuthentication"
            case kmsKeyId = "KmsKeyId"
            case optionGroupName = "OptionGroupName"
            case port = "Port"
            case restoreToTime = "RestoreToTime"
            case restoreType = "RestoreType"
            case sourceDBClusterIdentifier = "SourceDBClusterIdentifier"
            case tags = "Tags"
            case useLatestRestorableTime = "UseLatestRestorableTime"
            case vpcSecurityGroupIds = "VpcSecurityGroupIds"
        }
    }

    public struct RestoreDBClusterToPointInTimeResult: AWSDecodableShape {
        public let dBCluster: DBCluster?

        public init(dBCluster: DBCluster? = nil) {
            self.dBCluster = dBCluster
        }

        private enum CodingKeys: String, CodingKey {
            case dBCluster = "DBCluster"
        }
    }

    public struct StartDBClusterMessage: AWSEncodableShape {
        /// The DB cluster identifier of the Neptune DB cluster to be started. This parameter is stored as a lowercase string.
        public let dBClusterIdentifier: String

        public init(dBClusterIdentifier: String) {
            self.dBClusterIdentifier = dBClusterIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
        }
    }

    public struct StartDBClusterResult: AWSDecodableShape {
        public let dBCluster: DBCluster?

        public init(dBCluster: DBCluster? = nil) {
            self.dBCluster = dBCluster
        }

        private enum CodingKeys: String, CodingKey {
            case dBCluster = "DBCluster"
        }
    }

    public struct StopDBClusterMessage: AWSEncodableShape {
        /// The DB cluster identifier of the Neptune DB cluster to be stopped. This parameter is stored as a lowercase string.
        public let dBClusterIdentifier: String

        public init(dBClusterIdentifier: String) {
            self.dBClusterIdentifier = dBClusterIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case dBClusterIdentifier = "DBClusterIdentifier"
        }
    }

    public struct StopDBClusterResult: AWSDecodableShape {
        public let dBCluster: DBCluster?

        public init(dBCluster: DBCluster? = nil) {
            self.dBCluster = dBCluster
        }

        private enum CodingKeys: String, CodingKey {
            case dBCluster = "DBCluster"
        }
    }

    public struct Subnet: AWSDecodableShape {
        /// Specifies the EC2 Availability Zone that the subnet is in.
        public let subnetAvailabilityZone: AvailabilityZone?
        /// Specifies the identifier of the subnet.
        public let subnetIdentifier: String?
        /// Specifies the status of the subnet.
        public let subnetStatus: String?

        public init(subnetAvailabilityZone: AvailabilityZone? = nil, subnetIdentifier: String? = nil, subnetStatus: String? = nil) {
            self.subnetAvailabilityZone = subnetAvailabilityZone
            self.subnetIdentifier = subnetIdentifier
            self.subnetStatus = subnetStatus
        }

        private enum CodingKeys: String, CodingKey {
            case subnetAvailabilityZone = "SubnetAvailabilityZone"
            case subnetIdentifier = "SubnetIdentifier"
            case subnetStatus = "SubnetStatus"
        }
    }

    public struct Tag: AWSEncodableShape & AWSDecodableShape {
        /// A key is the required name of the tag. The string value can be from 1 to 128 Unicode characters in length and can't be prefixed with "aws:" or "rds:". The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', '/', '=', '+', '-' (Java regex: "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$").
        public let key: String?
        /// A value is the optional value of the tag. The string value can be from 1 to 256 Unicode characters in length and can't be prefixed with "aws:" or "rds:". The string can only contain only the set of Unicode letters, digits, white-space, '_', '.', '/', '=', '+', '-' (Java regex: "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$").
        public let value: String?

        public init(key: String? = nil, value: String? = nil) {
            self.key = key
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case key = "Key"
            case value = "Value"
        }
    }

    public struct TagListMessage: AWSDecodableShape {
        public struct _TagListEncoding: ArrayCoderProperties { public static let member = "Tag" }

        /// List of tags returned by the ListTagsForResource operation.
        @OptionalCustomCoding<ArrayCoder<_TagListEncoding, Tag>>
        public var tagList: [Tag]?

        public init(tagList: [Tag]? = nil) {
            self.tagList = tagList
        }

        private enum CodingKeys: String, CodingKey {
            case tagList = "TagList"
        }
    }

    public struct Timezone: AWSDecodableShape {
        /// The name of the time zone.
        public let timezoneName: String?

        public init(timezoneName: String? = nil) {
            self.timezoneName = timezoneName
        }

        private enum CodingKeys: String, CodingKey {
            case timezoneName = "TimezoneName"
        }
    }

    public struct UpgradeTarget: AWSDecodableShape {
        /// A value that indicates whether the target version is applied to any source DB instances that have AutoMinorVersionUpgrade set to true.
        public let autoUpgrade: Bool?
        /// The version of the database engine that a DB instance can be upgraded to.
        public let description: String?
        /// The name of the upgrade target database engine.
        public let engine: String?
        /// The version number of the upgrade target database engine.
        public let engineVersion: String?
        /// A value that indicates whether a database engine is upgraded to a major version.
        public let isMajorVersionUpgrade: Bool?

        public init(autoUpgrade: Bool? = nil, description: String? = nil, engine: String? = nil, engineVersion: String? = nil, isMajorVersionUpgrade: Bool? = nil) {
            self.autoUpgrade = autoUpgrade
            self.description = description
            self.engine = engine
            self.engineVersion = engineVersion
            self.isMajorVersionUpgrade = isMajorVersionUpgrade
        }

        private enum CodingKeys: String, CodingKey {
            case autoUpgrade = "AutoUpgrade"
            case description = "Description"
            case engine = "Engine"
            case engineVersion = "EngineVersion"
            case isMajorVersionUpgrade = "IsMajorVersionUpgrade"
        }
    }

    public struct ValidDBInstanceModificationsMessage: AWSDecodableShape {
        public struct _StorageEncoding: ArrayCoderProperties { public static let member = "ValidStorageOptions" }

        /// Valid storage options for your DB instance.
        @OptionalCustomCoding<ArrayCoder<_StorageEncoding, ValidStorageOptions>>
        public var storage: [ValidStorageOptions]?

        public init(storage: [ValidStorageOptions]? = nil) {
            self.storage = storage
        }

        private enum CodingKeys: String, CodingKey {
            case storage = "Storage"
        }
    }

    public struct ValidStorageOptions: AWSDecodableShape {
        public struct _IopsToStorageRatioEncoding: ArrayCoderProperties { public static let member = "DoubleRange" }
        public struct _ProvisionedIopsEncoding: ArrayCoderProperties { public static let member = "Range" }
        public struct _StorageSizeEncoding: ArrayCoderProperties { public static let member = "Range" }

        /// The valid range of Provisioned IOPS to gibibytes of storage multiplier. For example, 3-10, which means that provisioned IOPS can be between 3 and 10 times storage.
        @OptionalCustomCoding<ArrayCoder<_IopsToStorageRatioEncoding, DoubleRange>>
        public var iopsToStorageRatio: [DoubleRange]?
        /// The valid range of provisioned IOPS. For example, 1000-20000.
        @OptionalCustomCoding<ArrayCoder<_ProvisionedIopsEncoding, Range>>
        public var provisionedIops: [Range]?
        /// The valid range of storage in gibibytes. For example, 100 to 16384.
        @OptionalCustomCoding<ArrayCoder<_StorageSizeEncoding, Range>>
        public var storageSize: [Range]?
        /// The valid storage types for your DB instance. For example, gp2, io1.
        public let storageType: String?

        public init(iopsToStorageRatio: [DoubleRange]? = nil, provisionedIops: [Range]? = nil, storageSize: [Range]? = nil, storageType: String? = nil) {
            self.iopsToStorageRatio = iopsToStorageRatio
            self.provisionedIops = provisionedIops
            self.storageSize = storageSize
            self.storageType = storageType
        }

        private enum CodingKeys: String, CodingKey {
            case iopsToStorageRatio = "IopsToStorageRatio"
            case provisionedIops = "ProvisionedIops"
            case storageSize = "StorageSize"
            case storageType = "StorageType"
        }
    }

    public struct VpcSecurityGroupMembership: AWSDecodableShape {
        /// The status of the VPC security group.
        public let status: String?
        /// The name of the VPC security group.
        public let vpcSecurityGroupId: String?

        public init(status: String? = nil, vpcSecurityGroupId: String? = nil) {
            self.status = status
            self.vpcSecurityGroupId = vpcSecurityGroupId
        }

        private enum CodingKeys: String, CodingKey {
            case status = "Status"
            case vpcSecurityGroupId = "VpcSecurityGroupId"
        }
    }
}
